我的存储过程中有以下查询
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中运行。
非常感谢任何帮助
答案 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
}