Oracle参数化查询(Oledb)与常用的其他几个数据库MySQL,Microsoft SQL Server,PostgreSql 等(以下简称普通数据库)有所不同
值得注意的是,在普通数据库中,参数化查询中,参数是按名称一一对应的
如:
参数值则可以写成以下方式
string sql="select @para1,@para2 "; List<OleDbParameter> parameters = new List<OleDbParameter>(); parameters.Add(new OleDbParameter("@para1", "参数1的值")); parameters.Add(new OleDbParameter("@para2", "参数2的值"));
或者
string sql="select @para1,@para2 "; List<OleDbParameter> parameters = new List<OleDbParameter>(); parameters.Add(new OleDbParameter("@para2", "参数1的值")); parameters.Add(new OleDbParameter("@para1", "参数2的值"));
由上面代码可以看出,parameters中只要存在对应参数名称(@para1,@para2)即可
但是在Oracle数据库中则不同
此时,被加到parameters参数对象想中的参数,必须按照各个参数在sql语句中出现的顺序Add加到集合中
比如
正确写法↓↓↓↓
string sql="select :para1,:para2 from dual"; List<OleDbParameter> parameters = new List<OleDbParameter>(); parameters.Add(new OleDbParameter(":para1", "参数1的值")); parameters.Add(new OleDbParameter(":para2", "参数2的值"));
错误写法↓↓↓↓
string sql="select :para1,:para2 from dual"; List<OleDbParameter> parameters = new List<OleDbParameter>(); parameters.Add(new OleDbParameter(":para2", "参数1的值")); parameters.Add(new OleDbParameter(":para1", "参数2的值"));
以上错误写法的代码可能不会导致程序抛出异常,但是业务逻辑是错的
下面再举一个会报错的例子
string sql="select :para1,:para2 from dual where '条件值'=:para2"; List<OleDbParameter> parameters = new List<OleDbParameter>(); parameters.Add(new OleDbParameter(":para1", "参数1的值")); parameters.Add(new OleDbParameter(":para2", "参数2的值"));
这个时候,程序就会出现以下报错
正确写法
string sql="select :para1,:para2 from dual where '条件值'=:para3"; List<OleDbParameter> parameters = new List<OleDbParameter>(); parameters.Add(new OleDbParameter(":para1", "参数1的值")); parameters.Add(new OleDbParameter(":para2", "参数2的值")); parameters.Add(new OleDbParameter(":para3", "参数3的值"));
总结上面的内容:
1:被加到parameters参数对象中的参数,必须按照各个参数在sql语句中出现的顺序Add加到集合中
2:parameters参数对象中的参数不能在sql语句中重复使用,即使是相同的值,也需要重新添加一个参数