从Windows服务临时访问错误运行存储过程

时间:2017-05-16 20:00:01

标签: c# sql-server

我试图运行一个存储过程来处理excel文件,以便从C#开发的Windows服务导入。我可以直接在SQL Server Management Studio中运行存储过程,但是当通过服务运行存储过程时,我收到以下错误;

  

临时访问OLE DB提供程序' Microsoft.ACE.OLEDB.12.0'被拒绝了。您必须通过链接服务器访问此提供程序。

{p> Microsoft.ACE.OLEDB.12.0列在Server Object\Linked Servers\Providers中,此外,Disallow adhoc access在“提供商选项”中未选中。

我不知道还有什么可以尝试。有什么想法吗? TIA

编辑:添加了一些服务代码

public ProcessFile(string fileName)
{
        this.fileName = fileName;
        fileToProcess = Properties.Settings.Default.importFilePath + "\\" + fileName;

        log.Debug("fileToProcess: " + fileToProcess);

        OpenExcelFile();

        excelSheets = getSheetNames();

        excelWorkSheet = (Excel.Worksheet)excelSheets.get_Item(2);

        log.Debug("sheet Name: " + excelWorkSheet.Name);

        connectToDb();

        CloseExcelFile();
}

private void connectToDb()
{
        int retVal = db.LoadSPVDataSheet(Properties.Settings.Default.importFilePath, this.fileName, excelWorkSheet.Name);
}

编辑2

我正在使用在Windows Server 2012 R2上运行的SQL Server 2012

SQL server Registry entries SSMS Provider Dialog

编辑3 我找到了AllowInProcess的条目,并且Disallow Adhoc条目不在那里。它位于@:

HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WOW6462Node\Microsoft\Microsoft SQL Server\MSAS11.<ServerName>\Providers\MSOLAP

我要添加条目并报告回来。

编辑4

现在正在连接和处理服务代码。我找到了另一个缺少DisallowAdHocAccess注册表项的地方。

HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WOW6462Node\Microsoft\Microsoft SQL Server\MSSQL11.<ServerName>\Providers\Microsoft.ACE.OLEDB.12.0

我在那里添加了密钥,并且有效。

1 个答案:

答案 0 :(得分:1)

查看此连接项:https://connect.microsoft.com/SQLServer/feedback/details/257494/smss-does-not-handle-the-provider-option-disallowadhocaccess-correctly 或阅读此处解释的详细信息:https://www.mssqltips.com/sqlservertip/4582/sql-server-ad-hoc-access-to-ole-db-provider-has-been-denied-error/ &#34;我们可以禁用&#34;禁止adhoc访问&#34;从SSMS提供程序属性,但它删除注册表中的条目而不是将值更改为零,我们仍然得到对OLE DB提供程序的临时访问被拒绝错误。&#34; 因此,您应该在注册表中手动添加缺少的条目并在其中输入0