我的项目在Oracle DB中使用Visual Studio发现了一个奇怪的问题。首先,我打开我的Toad检查Oracle功能,如下图所示:
当我将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");
为什么????
答案 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< - 这可能是处理
的好方法