编写跨数据库程序的几点注意事项

      最近升级部分业务模块以支持Oracle数据库,碰到了一些微妙的问题。
      1. OleDbConnection连接字符串如果provider为msdaora时,用户名和密码是不能简写的,为sqloledb时,是可以简写的。
      使用ADO.Net时,连接字符串可以将user id 简写为uid,password简写为pwd。但是会引起一些微妙的错误。当我将provider改为msdaora时,发现数据库连接打不开,异常为System.Data.OleDb.OleDbException描述为"ORA-12560: TNS: 协议适配器错误"。很是郁闷,我们知道引起这个异常有很多原因。试了很多次都不成功,最后修改了连接字符串,不在使用简写。成功了。
       最后我试了试OracleConnection,是支持简写的。

      2. 字符串空格
       在sql语句中,select .... where const_code='UrgenceDegree ',也不知道以前的哥们怎么回事,'UrgenceDegree '末尾多了个空格。以前连sqlserver数据库时,是可以取出数据的。现在连oracle数据库时,可就不行了。这种手误是非常害人的。另外对字符串的大小写,不同的数据库也是不同的。
    3. Oracle中处理bool类型的方式就和SQL Server不同
    sqlserver中,有bit类型,而oracle没有,在程序中编码不当,会引起微妙的问题。
    dataReader[0]在sqlserver
    if(dataReader[0].ToString().ToUpper() == "FALSE")
    {
    ......
    }
    这种判断方法在处理bit数据时,在Sql Server下是没问题的。Oracle下就不行了。
    if(Convert.ToInt16(dataReader[0]) == "0")
    {
    ......
    }
    这样写,两种数据库下都可以用了。

posted on 2006-05-22 17:48  快乐尘埃  阅读(537)  评论(0编辑  收藏  举报