Search code examples
oracle-databasevisual-studioparametersvisual-studio-2015stored-functions

How To Use ODAC With Visual Studio 2015 Call Oracle DB (Stored-Function)


There is a strange problem that has been found in Oracle DB with Visual Studio by my project. First I open my Toad to check Oracle function like as below picture:
enter image description here
When I have put 3 parameter's value into SF_GET_COMP_SVAL, it is working ,and then when I have tried it in my project as following, it also works very well.

            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
                    {

                    }
                }
            }

However it can't be working when I use Paramters mode like as following code

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

why????


Solution

  • I wasted half day and have found the ODAC problem in my case, why can't insert into data with paramters in Visual Studio platform , because of parameters name , if fact in my MySql and MSSql there don't need to follow the sequence with parameter , but unfortunately in the Oracle it can't change ordering ,the parameter's depends on index sequence so that you can change any parameter's name

    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 or xx is the same (depends on index sequence not parameter name)

    both codes can get the same result.
    PS: Hopefully it will be modify soon by Oracle Provider.