51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3559|回复: 1
打印 上一主题 下一主题

[原创] ADO连接oracle数据库驱动问题-CLOB类型

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-7-21 12:56:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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.

看来我的系统粮票了:)
附件:
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-7-21 23:51:46 | 只看该作者
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 持久性。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-30 04:22 , Processed in 0.089665 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表