首页 > 解决方案 > 从 Excel 读取并将内容存储在数据库中 - 作为过程工作,但是从 C# 控制台应用程序执行时,它会中断

问题描述

所以标题是不言自明的。

我有一个执行并完成工作的存储过程。这是相关部分:

SELECT O.* FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0'
        , 'Excel 12.0; Database=D:\File.xlsx; HDR=YES'
        , 'SELECT * FROM [Sheet1$]'
        ) AS O

所以“数据库”位置与控制台应用程序不在同一个文件夹中。不知道这是否有问题——我认为不应该。因此,从代码执行过程时:

using (SqlCommand command = new SqlCommand("CreateAndSeedTable", connection) { CommandType = CommandType.StoredProcedure })

抛出此错误(注意:所有其他程序运行良好):

未处理的异常:System.Data.SqlClient.SqlException:无法为链接服务器“(null)”初始化 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的数据源对象。

链接服务器“(null)”的 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”返回消息“未指定错误”。

为什么从代码调用过程会引发错误?解决方法是什么?

标签: c#stored-proceduresoledb

解决方案


OPENROWSET 是一个 sql 函数,它在 sql 数据库服务器上运行。服务器进程必须能够读取 ACE 驱动程序和电子表格路径。

这真的是你打算做的吗?或者您是否希望您的 c# 控制台程序读取电子表格内容、处理它们并将它们发送到 sql 服务器?


推荐阅读