Bcp,openrowset 的网络访问

----------------------------------------
--Bcp,openrowset 的网络访问
--Flystone--2008-06
-----------------------------------------
一般情况在本地的excel文件,相信大家都会了吧
格式如下:
--1
SELECT *FROM openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=c:\aa.xls','select * from [sheet1$]')
--2
SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\aa.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[sheet1$]
--3 将会保存到服务器的C:\temp.xls
exec master..xp_cmdshell 'bcp 200800303.dbo.fdaenterprise out C:\temp.xls -c -q -T -s "192.168.0.126" -u"sa" -p"sa"'
对于这些操作相信大家都会了,不存在问题,可是如何进行网络操作呢?
比如bcp到网络其它机器一般会有如下写法:
exec master..xp_cmdshell 'bcp 200800303.dbo.fdaenterprise out \\192.168.0.136\E:\tst\temp.xls -c -q -T -s "192.168.0.126" -u"sa" -p"sa"'
或有人映射网络驱动器Z: -->\\192.168.0.136\tst
exec master..xp_cmdshell 'bcp 200800303.dbo.fdaenterprise out Z:\temp.xls -c -q -T -s "192.168.0.126" -u"sa" -p"sa"'
192.168.0.136上的E:\tst是设置的共享文件夹
执行上面的SQL,有下面的错误:
SQLState = S1000, NativeError = 0 Error = [Microsoft][ODBC SQL Server Driver]
无法打开 BCP 主数据文件
如果访问网络上的excel文件,不管是共享地址(\\192.168.0.136\tst\temp.xls)还是映射他人的本机物理地址如(Z:\temp.xls)会如下提示:
消息 7399,级别 16,状态 1,第 1 行链接服务器 "(null)" 的 OLE DB 访问接口 "MICROSOFT.JET.OLEDB.4.0" 报错。提供程序未给出有关错误的任何信息。
消息 7303,级别 16,状态 1,第 1 行无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "MICROSOFT.JET.OLEDB.4.0" 的数据源对象。
那么, 怎么来解决这个问题呢?
首先,我们可以在查询分析器运行如下代码 :
exec master..xp_cmdshell 'dir \\192.168.0.136\c$'
此时如果能正常显示出网络机器的目录 说明 会话建立,如果提示拒绝访问就是会话没有建立运行如下代码
进行网络连接:
exec master..xp_cmdshell'net use \\192.168.0.136\c$ zxcvbnm /user:192.168.0.136\administrator'
注释: 其中:PASSWORD, 是 USERNAME在 192.168.0.136上的用户,当为空时,用'''' USERNAME 能访问这个目录 的用用户,
比如administrator比如你192.168.0.136 机器上administrator,密码为:1234
exec master..xp_cmdshell'net use \\192.168.0.136\tst 1234 /user:192.168.0.136\administrator'
接着你运行如下:
SELECT *FROM openrowset('MICROSOFT.JET.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=\\192.168.0.50\c$\aa.xls','select * from [sheet1$]')
哇,是不是数据全出来了呀,当然你的bcp操作也会成功的了
大家有兴趣可以看看我那篇 blog
一个关于网络备份的例子

你可能感兴趣的:(C++,c,Excel,XP,Microsoft)