当前位置: 首页 > 面试题库 >

使用SQL凭据通过OpenRowSet打开文件

贺雅健
2023-03-14
问题内容

我正在尝试运行以下语句:

INSERT INTO table SELECT * FROM 
OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0;
Database=//server/folder/file.xls;
HDR=YES;',
'SELECT * FROM [Sheet1$]')

但是,我收到以下错误:

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "The Microsoft Access database engine cannot open or write to the file '\\server\folder\file.xls'. It is already opened exclusively by another user, or you need permission to view and write its data.".

Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)".

我在32位计算机上运行SQL Server 2005。最终执行的代码将来自IIS6 Web服务器上的c#代码。但是,当前我只是试图使其在SQL
Server上运行。我已使用SQL Auth登录到SQL Server,但必须使用特定于共享驱动器(我们网络上的AD帐户)的Windows
Auth访问该文件。为了允许,已将临时特权授予SQL Auth帐户OPENROWSET

我试图添加UID=user;PASS=pswdOPENROWSET下面的代码中:

INSERT INTO table SELECT * FROM 
    OPENROWSET('Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;
    Database=//server/folder/file.xls;
    HDR=YES;
UID=user;
PASS=pswd',
    'SELECT * FROM [Sheet1$]')

这产生了相同的错误。我还CREDENTIAL使用用户ID设置了SQL ,并通过Windows Auth Active
Directory帐户访问了该共享驱动器,但仍然存在错误。

我考虑过使用代理,但这不是SQL Server代理作业。这是一个特别的电话。

我还使用具有共享权限的用户使用Windows Auth登录了SQL Server,并得到了相同的错误。

我对此进行了很多研究,但似乎找不到有效的答案。通过我的搜索,这似乎是很多人遇到的问题。任何帮助将不胜感激。我很困惑


问题答案:

我非常确定,当您使用OpenRowSet时,它是需要访问文件的SQL Server的Service用户。

而且由于您似乎正在尝试访问另一台服务器上的文件,所以如果SQL Server以本地系统或其他本地用户帐户的身份运行,则使其工作可能是一个挑战。

我已经通过更改SQL
Server使其以AD用户身份运行(具有安全隐患),然后赋予该用户访问网络上文件的权限,或者放置了外部文件(在这种情况下为Excel)来解决此问题)和SQL
Server在同一台计算机上。



 类似资料:
  • 问题内容: 我对编程和python语言非常陌生。 我知道如何在python中打开文件,但问题是如何将文件作为函数的参数打开? 例: 这是我写出代码的方式: 问题答案: 您可以轻松地传递文件对象。 然后在您的函数中,返回行列表 另一个技巧是,python文件对象实际上具有读取文件行的​​方法。像这样: 第二种方法,就像您的功能一样。您不必再次调用它。 更新 这里是您应该如何编写代码的方法: 第一种方

  • 我试图通过MS Word打开pdf文件,执行某些操作,例如评估计算、打印文件等,然后继续关闭文件。我收到的错误消息是“Microsoft Excel正在等待另一个应用程序完成OLE操作。” 我之前尝试过超链接跟踪和

  • 我在sdcard中的某个文件夹中有一些pdf文件。我创建了一个将所有pdf显示为ListView的应用程序。当我单击任何pdf文件时,它会在officeSuite应用程序(不支持或损坏文件格式)中出现错误。代码有问题。这是代码。 //显示为ListVIew的项目代码 //打开文件的代码VIA Intent 错误: 损坏或不支持的文件格式

  • 我有一个。jar文件,我希望通过双击它而不是命令行打开它。当我双击它时,无论它是用javaw.exe打开的,我都希望它在双击它时用java.exe打开。

  • 我正在使用gradle credentials插件将用户和密码数据库传递给liquibase插件。另外,我使用spring data repositories和hibernate作为数据层,我希望传递给它与liquibase插件相同的配置。有一种通过gradle传递凭据的方法(我不想创建application.properties文件,因为凭据已经存储在凭据插件上)? 我正在使用以下代码向Liqu

  • 问题内容: 如何通过单击任何链接打开本地文件夹视图? 我尝试了很多选择 要么 要么 问题答案: 由于安全性限制,在所有现代浏览器中都禁止链接到本地​​资源。 对于Firefox: 为了安全起见,Mozilla应用程序阻止从远程文件到本地文件(和目录)的链接。这包括链接到硬盘驱动器,映射的网络驱动器上的文件,以及通过统一命名约定(UNC)路径访问的文件。这样可以避免许多不愉快的可能性,包括: 允许站