【发布时间】:2018-08-20 18:43:57
【问题描述】:
我的存储过程中有以下查询
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
我已经搜索过这个解决方案,但似乎所有人都在讨论如何让它在 SQL 中运行。
任何帮助将不胜感激
【问题讨论】:
-
你的代码在哪里可以从 c# 中完成?您是否有理由不只是通过 OleDb 直接连接到 Excel 工作表?
-
使用 32bit / 64bit / Any CPU for C# - 很可能你的架构看不到你安装的驱动程序
-
@RowlandShaw 我需要将批量数据导入数据库表,这就是我在 sqlserver 上执行此操作的原因。 Lanorkin 你所说的建筑是什么意思?请解释一下。
-
@Imran: 尝试使用 OPENROWSET 而不是 OPENDATASOURCE ?像这样的东西 -
SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0; Database=C:\TEMP_EXCEL\sheet.xlsx; Extended Properties=''EXCEL 12.0;HDR=NO;IMEX=1', 'SELECT * FROM [Sheet1$]')是的,还向我们展示你的 C# 代码...... -
@Imran:如果您的选择语句有效,那么我认为您需要编写类似这样的查询 -
Insert INTO my_table(col1, col2) SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 12.0; Database=C:\TEMP_EXCEL\sheet.xlsx; Extended Properties=''EXCEL 12.0;HDR=NO;IMEX=1','SELECT col1, col2 FROM [Sheet1$]')
标签: c# sql sql-server