如何在Visual Studio 2015中使用ODAC调用Oracle DB(存储函数)

时间:2016-04-20 06:09:38

标签: oracle visual-studio parameters visual-studio-2015 stored-functions

我的项目在Oracle DB中使用Visual Studio发现了一个奇怪的问题。首先,我打开我的Toad检查Oracle功能,如下图所示:
enter image description here
当我将3个参数的值放入SF_GET_COMP_SVAL时,它正在工作,然后当我在我的项目中尝试如下时,它也能很好地工作。

            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
                    {

                    }
                }
            }

然而,当我使用 Paramters模式时它无法正常工作,如下面的代码

cmd.CommandText ="从双"中选择PG_AIS.SF_GET_COMP_SVAL(:a1,:a2,:a3); cmd.Parameters.Add(" a2"," 1");
cmd.Parameters.Add(" a3"," 2");
cmd.Parameters.Add(" a1"," 3");

为什么????

2 个答案:

答案 0 :(得分:0)

我浪费了半天并且在我的情况下发现了ODAC问题,为什么不能在Visual Studio平台中插入带有参数的数据,因为参数名称,如果我的MySql和MSSql中的事实不需要按照参数的顺序,但不幸的是在Oracle中它不能改变排序,参数依赖于索引序列,这样你就可以改变任何参数的名称

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");    

参数a1或xx是相同的(取决于索引序列而不是参数名称)

两个代码都可以得到相同的结果 PS:希望Oracle Provider尽快修改。

答案 1 :(得分:0)

我找到了另一种方法来解决这个问题,请尝试一下

OracleCommand command = new OracleCommand(query, connection) 
    { CommandType = CommandType.Text, BindByName = true };

PS:http://www.codeproject.com/Articles/208176/Gotcha-sharp-Using-Named-Parameters-with-Oracl< - 这可能是处理

的好方法