分享:sql server 连接mysql的问题和解决方法

故障: 

环境: windows 2003 + sql server 2000 (sp4)

因为要访问mysql 数据库,所以安装了MyODBC 3.51.12驱动,创建odbc数据源test指向mysql数据库
然后在sql server上创建链接服务器testmysql。

但在使用
select * from openquery(testmysql,'select id from user where id=1')
时报错,访问mysql以前很正常,从没有出错过,错误如下:

---------------------------
错误 7399: OLE DB 提供程序 'MSDASQL' 报错。提供程序报告了意外的灾难性错误。
OLE DB 错误跟踪[OLE/DB Provider 'MSDASQL' IDBInitialize::Initialize returned 0x8000ffff:  提供程序报告了意外的灾难性错误。]。
---------------------------


问题解决!使用openrowset成功!

用sql server 2000或者sql server 2005 连接mysql 的其中2种方法:
1. openquery
2. openrowset

个人感觉openquery是适合菜鸟使用,openrowset适合高手使用,为什么这么说呢?
大家看一下两个sql 语句就明白了:

1. select * from openquery(linkserver1,'select count(*) from user')
2. SELECT * FROM OPENROWSET('MSDASQL','DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.168.0.1;PORT=3306;DATABASE=test;USER=dbauser;PASSWORD=userpw;STMT=set names gb2312;OPTION=2049','select count(*) from user;')

从原理上说两张方法是一样的效果,但许多情况下openquery会报错,莫名其妙的错误。这2种方法的不同之处:

1需要创建一个连mysql的odbc连接,然后在sql server建个linkserver使用这个odbc连接。
2什么都不用,直接使用连接字符串去连mysql

MSDASQL 是处理ODBC连接的微软数据访问组件,所有的参数是根据所用的Driver而定。
我这里使用的是MySQL ODBC 3.51 Driver,就必须去查看MySQL ODBC 3.51 Driver的连接参数

MySQL ODBC 3.51 Driver的连接参数见下面网址:
http://dev.mysql.com/doc/refman/5.0/en/connection-parameters.html

希望我的经历能给一直郁闷的兄弟有点帮助,至少我不郁闷了,哈哈哈

注意:在sql server 2005 上使用openrowset需要打开2个开关:

1.  在注册表查找DisallowAdhocAccess  置为1
2.  打开ad hoc高级选项

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries',1
GO
RECONFIGURE;
GO

----如果还有其它问题,发信给我 qinhonglin@gmail.com
(转自www.itpub.net)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值