openrowset SQL认证模式 不能访问非本地文件(邹建请进)

jackchen0128 2008-10-10 09:20:51
先前已经查询相关贴子和邹老大的一些回复,不过还是没能处理这个问题:

帐号使用SA登录
select * from
openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=YES;IMEX=YES;Database=D:\test.xls',sheet1$)

select * from
openrowset('Microsoft.Jet.OLEDB.4.0','Excel 8.0;HDR=YES;IMEX=YES;Database=D:\test.xls',sheet1$)

都能正确返回结果,但如果excel文件在打开状态,Jet则不能访问
所以ACE比Jet好

但访问远程文件时(有远程目录的读写权限并且在windows下能够访问)
select * from
openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=YES;IMEX=YES;Database=\\fileserver\import\test.xls',sheet1$)
提示错误
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 返回了消息 "Microsoft Office Access 数据库引擎无法打开文件“\\fileserver\全国业务-杂品定额表\import\test.xls”或无法向其写入数据。它已经被其他用户以独占方式打开,或者您没有查看或写入其数据的权限。"。
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 的数据源对象。


而如果登录SQL使用windows论证方式,以上所有语句均能查询出正确结果.

请问如何解决使用SQL认证方式能导入网络excel文件?







...全文
201 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackchen0128 2008-10-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 roy_88 的回复:]
但有没有一种方法,如已经在windows中做了路径映射,不需要再在SQL中执行xp_cmdshell来映射一次呢
毕竟开放xp_cmdshell不安全
----------------------
映射的盤符要確認是否存在,是否有權限
[/Quote]
都有权限,而且也已经存在,如果用windows登录验证访问SQL能打开网络文件,
而使用SQL帐号验证方式必须SQL内执行 xp_cmdshell
否则还是访问不了在windows下映射的网络文件,不知道我这个问题说得是否够明白,
个人感觉SQL的windows验证方式和SQL验证对网络文件的处理不同。

在SQL内映射的,windows帐号认证的可以打开远程文件
在windows内映射的,sql帐号认证却不可以打开远程文件
jackchen0128 2008-10-10
  • 打赏
  • 举报
回复
与文件是否打开无关,Jet不能访问打开的文件,
但ACE没问题,问题已经解决,但还不算很完美,
谢谢!
请其它高手继续解答。
中国风 2008-10-10
  • 打赏
  • 举报
回复
但有没有一种方法,如已经在windows中做了路径映射,不需要再在SQL中执行xp_cmdshell来映射一次呢
毕竟开放xp_cmdshell不安全
----------------------
映射的盤符要確認是否存在,是否有權限
中国风 2008-10-10
  • 打赏
  • 举报
回复
樓主的錯誤;確定文件是否打開
jackchen0128 2008-10-10
  • 打赏
  • 举报
回复
谢谢 wufeng4552 ,通过xp_cmdshell
问题好似得到了解决
exec master..xp_cmdshell 'net use z: \\fileserver\全国业务-杂品定额表 test /user:Fileserver\test' 
go

select * from
openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=YES;IMEX=YES;Database=z:\import\test.xls',sheet1$)
go

select * from
openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=YES;IMEX=YES;Database=\\fileserver\全国业务-杂品定额表\import\test.xls',sheet1$)
go
exec master..xp_cmdshell 'net use z: /delete'


这种方式能查询出数据,
但有没有一种方法,如已经在windows中做了路径映射,不需要再在SQL中执行xp_cmdshell来映射一次呢
毕竟开放xp_cmdshell不安全
jackchen0128 2008-10-10
  • 打赏
  • 举报
回复
不好意思,补充一下,上文的 \\fileserver\import\test.xls
和 \\fileserver\全国业务-杂品定额表\import\test.xls
都是\\fileserver\全国业务-杂品定额表\import\test.xls
免得误导.不存在文件路径不对的问题
水族杰纶 2008-10-10
  • 打赏
  • 举报
回复
--在sql中映射一下看看
exec master..xp_cmdshell 'net use z: \\fileserver\import "密码" /user:yizhi\administrator'
go
select * from
openrowset('Microsoft.ACE.OLEDB.12.0','Excel 12.0;HDR=YES;IMEX=YES;Database=z:\test.xls',sheet1$)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧