从C#代码调用时查询抛出异常

时间:2014-08-21 07:36:01

标签: c# sql sql-server

我的存储过程中有以下查询

SELECT * INTO my_table FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0',''Data Source=C:\TEMP_EXCEL\sheet.xls;Extended Properties=Excel 12.0'')...Sheet1$]

运行管理工作室时运行正常,但从C#代码调用时会抛出跟随错误。

  

System.Data.SqlClient.SqlException(0x80131904):无法执行请求的操作,因为OLE DB提供程序   链接服务器“(null)”的“Microsoft.ACE.OLEDB.12.0”不支持   所需的事务接口。 Microsoft.ACE.OLEDB.12.0

我已设置以下配置值

EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO 
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO

还有这个

sp_configure 'show advanced options', 1;**
GO
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;**
GO
RECONFIGURE;
GO

我已经用Google搜索了这个解决方案,但似乎所有人都在讨论如何让它在SQL中运行。

非常感谢任何帮助

2 个答案:

答案 0 :(得分:1)

我找到了解决问题的方法。如错误中所述:

" Microsoft.ACE.OLEDB.12.0"对于链接服务器"(null)"不支持所需的事务接口。 Microsoft.ACE.OLEDB.12.0"

链接服务器不支持所需的事务接口,我忘了提到在存储过程中我在事务中有这个查询,它需要有提到的事务隔离级别所以我添加了 "阅读提交" 到我的查询,无论什么是默认的,它都没有使用它,它解决了我的问题。

谢谢大家。非常感谢您的时间。

答案 1 :(得分:0)

这是一个旧问题,但是在我们意外升级现有代码以使用EF 6.1.2之后,出现了此错误 对我们来说,一种解决方法是在调用任何存储过程之前,将GuaranteeTransactionsForFunctionsAndCommands设置为false:

 using (Ef6Context db = NewContext())
 {
     db.Configuration.EnsureTransactionsForFunctionsAndCommands = false;
     // Call an imported SP
 }