先看一段代码片断:
string sql1="select * from table1 where id='@id'"; //1
string sql2="select * from table1 where id='?'"; //2
OleDbCommnad oleComm=new OleDbCommand(sql1,connect);//connect为oracle数据库连接
OracleCommand oraComm=new OracleCommand(sql1,connect);
oleComm.Parameters.AddWithValue("@id",888);
oraComm.Parameters.AddWithValue("@id",888);
string sql3="select * from table1 where id=":id";
OracleCommand oraComm=new OracleCommand(sql3,connect);
oraComm.Parameters.AddWithValue(":id",888);将@符号换成:号就可以了。
可怜我对Sql Server用过一些,原以为在.net中使用oracle数据库也会很轻松,结果这个小问题就弄了大半天时间。以前写相应语句都是类似@id的形式,一更换数据库,这下有工作量了。
对于更换提供者(或更换数据库)所带来的工作量,大家有什么好的改善建议请赐教。
string sql1="select * from table1 where id='@id'"; //1
string sql2="select * from table1 where id='?'"; //2OleDbCommnad oleComm=new OleDbCommand(sql1,connect);//connect为oracle数据库连接
OracleCommand oraComm=new OracleCommand(sql1,connect);
oleComm.Parameters.AddWithValue("@id",888);

oraComm.Parameters.AddWithValue("@id",888);

代码中的oraComm在ExecuteReader的时候竟然报异常:“System.Data.OracleClient.OracleException: Error while trying to retrieve text for error ORA-01036”,把oraComm的构造参数换成sql2的方式仍然不行。遍查代码没发现什么可疑的地方,所有实例、教程都是这么写的,而且OleDb提供者能运行,为什么OracleClient就不行了呢。
在遍查了国外的帖子后才发现问题,对于OracleClient提供者@id及?方式都不被支持。而是应该用如下方式定义:
string sql3="select * from table1 where id=":id";OracleCommand oraComm=new OracleCommand(sql3,connect);

oraComm.Parameters.AddWithValue(":id",888);可怜我对Sql Server用过一些,原以为在.net中使用oracle数据库也会很轻松,结果这个小问题就弄了大半天时间。以前写相应语句都是类似@id的形式,一更换数据库,这下有工作量了。
对于更换提供者(或更换数据库)所带来的工作量,大家有什么好的改善建议请赐教。
浙公网安备 33010602011771号