|
by jack
前几天在写脚本的时候需要用到大量的数据库插入和检查点,就调用了一个我们自己写的框架中获取数据库连接的方法,然后进行数据的插入、更新、查询。
在脚本写好后,试运行,突然抛出一个异常
查了一下数据库的表结构,没有发现什么异常的数据类型
分布调试发现某些sql能通过,但某些通不过
再次查询数据库的表结构,并对比了能通过和不能通过的sql,发现CLOB类型的字段无法操作
直觉上感到可能跟所用的数据库驱动有关系
于是查看了框架中获取数据库连接的方法源代码,发现数据库连接字符串是这样写的:
strConnectionString = "Provider=MSDAORA;Persist Security Info=True;"&_ "Data Source=(DEscrīptION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST ="+strHost +")(PORT = "+strPort+")))"&_ "(CONNECT_DATA =(SID = "+strSID+")));User ID="+strUser+";Password="+strPassword+";" |
数据库驱动项是“MSDAORA”,也就是用了odbc;由于需要尽快解决,就把当前odbc为什么不支持CLOB类型的问题先放下;直接拿了OraOLEDB来用(由于是使用oracle驱动,要求必须安装oracle客户端,该驱动对oracle数据库的支持肯定是没问题的,“大水不会总冲龙王庙的”)
于是把MSDAORA替换为OraOLEDB.Oracle,再尝试连接,进行与CLOB类型字段有关的操作,ok了。
事后在oracle提供的有关odbc的faq中找到
Oracle 8 LOB (Long or Large Object) Columns The Oracle 8.0.4 ODBC driver was the first version supplied by Oracle that conformed to the ODBC version 3 API specification. The drivers released prior to this ODBC API only supported level 2 compliance of the version 2.5 specification. The first versions of this driver allowed READ accesses to the new LOB column data types in Oracle 8. Starting with version 8.0.5.1.x, write access was also allowed10. In order to access the LOB data types you simply bind them as the appropriate ODBC data type (LONG VARCHAR, LONG VARBINARY) as you would LONG or LONG RAW columns, or use the new ODBC API data types that Oracle registered with Microsoft11 (BLOB, CLOB). [Note: A SQLDescribeCol may report the new data types] These new data type declarations should be included with the MDAC 2.0 and later releases from Microsoft, but for compatibility, you should simply use the appropriate LONG VARxxxx type. |
看来我的系统粮票了:)
附件:
|
|