月黑风高夜,挑灯读书时

年龄不小了,应该有所长进了,浑浑噩噩到什么时候呢?

博客园 首页 联系 订阅 管理
    先看一段代码片断:

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

    代码中的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的形式,一更换数据库,这下有工作量了。
    对于更换提供者(或更换数据库)所带来的工作量,大家有什么好的改善建议请赐教。
posted on 2006-01-12 16:03  黑风  阅读(3919)  评论(5)    收藏  举报