51Testing软件测试论坛

标题: ADO连接oracle数据库驱动问题-CLOB类型 [打印本页]

作者: qaarchitech    时间: 2008-7-21 12:56
标题: ADO连接oracle数据库驱动问题-CLOB类型
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.

看来我的系统粮票了:)
附件:

作者: liangjz    时间: 2008-7-21 23:51
MS也有文章说明:

http://support.microsoft.com/kb/244661/
从 Microsoft Data Access Components (MDAC) 2.5 和版本, Microsoft ODBC Driver 和 OLEDB 提供程序都支持 Oracle 8i 具有下列限制: • 不支持 Oracle 8.x - 特定数据类型, 如 CLOB、 BLOB、 BFILE、 NCHAR、 NCLOB 和 NVARCHAR2。
• 不支持 Unicode 功能对 Oracle 8 x 和服务器。
• 不支持多 Oracle 客户端实例或 Oracle 多家, 因为它们依赖于首处 Oracle 家庭 SYSTEM PATH 变量中。
• 从存储过程或批处理 SQL 语句返回多 resultsets 不支持使用 ADO 或 OLEDB。 有关如何以从 Oracle 检索结果集存储过程, 请单击下列文章编号, 查看 Microsoft 知识库文章中文章:
255043 (http://support.microsoft.com/kb/255043/) 如何从 Oracle 通过 ASP 使用 REF CURSORS 检索 ADO 记录
176086 (http://support.microsoft.com/kb/176086/EN-US/) HOWTO: 检索 Recordsets 从 Oracle 存储过程使用 ADO  
• 不支持嵌套的外部联接。
• 不支持 XML 持久性。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2