我试图运行一个存储过程来处理excel文件,以便从C#开发的Windows服务导入。我可以直接在SQL Server Management Studio中运行存储过程,但是当通过服务运行存储过程时,我收到以下错误;
{p>临时访问OLE DB提供程序' Microsoft.ACE.OLEDB.12.0'被拒绝了。您必须通过链接服务器访问此提供程序。
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
编辑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
我在那里添加了密钥,并且有效。
答案 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