0

Es gibt ein seltsames Problem, das in Oracle DB mit Visual Studio von meinem Projekt gefunden wurde. Zuerst öffne ich meine Toad, um Oracle-Funktion wie unten Bild zu überprüfen:
enter image description here
Wenn ich 3 Parameter Wert in SF_GET_COMP_SVAL gesetzt habe, funktioniert es, und wenn ich es in meinem Projekt wie folgt versucht habe, funktioniert es auch sehr Gut.Verwendung von ODAC mit Visual Studio 2015 Aufruf Oracle DB (Stored-Function)

  using (OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleDbContext"].ToString())) 
      { 
       using (OracleCommand cmd = new OracleCommand()) 
       { 
        cmd.CommandText = "select PG_AIS.SF_GET_COMP_SVAL('3','2','1') from dual"; 
        try 
        { 
         cmd.Connection = con; 
         con.Open(); 
         cmd.ExecuteNonQuery(); 
        } 
        catch 
        { 

        } 
       } 
      } 

Allerdings kann es nicht funktioniert, wenn ich Paramter Modus wie wie folgenden Code verwenden

cmd.CommandText = "select PG_AIS.SF_GET_COMP_SVAL (a1,: a2,: a3) Dual"; cmd.Parameters.Add ("a2", "1");
cmd.Parameters.Add ("a3", "2");
cmd.Parameters.Add ("a1", "3");

warum ????

Antwort

0

Ich verschwendete halben Tag und habe das ODAC Problem in meinem Fall, warum nicht einfügen in Daten mit paramters in Visual Studio-Plattform, weil Parameter nennen gefunden, wenn tatsächlich in meiner MySql und MSSql es nicht tun müssen der Sequenz mit dem Parameter folgen, aber leider in der Oracle kann es nicht Ordnung ändern, hängen die Parameter des auf Indexfolge, so dass Sie den Namen eines Parameters ändern kann

cmd.CommandText="select PG_AIS.SF_GET_COMP_SVAL(:a1,:a2,:a3) from dual";    
cmd.Parameters.Add("a1", "3");  
cmd.Parameters.Add("a2", "2");  
cmd.Parameters.Add("a3", "1");  
or 
cmd.CommandText="select PG_AIS.SF_GET_COMP_SVAL(:a1,:a2,:a3) from dual";  
cmd.Parameters.Add("xx", "3");  
cmd.Parameters.Add("a2", "2");  
cmd.Parameters.Add("a3", "1");  

Parameter a1 oder xx ist das gleiche (depends auf Indexsequenz nicht Parametername)

beide Codes c und bekomme das gleiche Ergebnis.
PS: Hoffentlich wird es bald von Oracle Provider modifiziert werden.

Verwandte Themen