You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以管理员身份执行存储过程并解决OLE DB初始化错误?

问题描述

我用以下代码运行存储过程dbo.UPDATE_ELECTRICAL_CABLES_TD_FROM_QC:

public void RunUpdateElectricalCablesSPS()
{
    using (var conn = new SqlConnection("data source=HUSSEIN******;initial catalog=GASCODB;Trusted_Connection = yes"))
    using (var command = new SqlCommand("dbo.UPDATE_ELECTRICAL_CABLES_TD_FROM_QC", conn)
        {
            CommandType = CommandType.StoredProcedure
        })
    { 
        conn.Open();
        command.ExecuteNonQuery();
    }
}

该存储过程负责从Excel工作表更新SQL Server表。运行代码时出现如下错误:

System.Data.SqlClient.SqlException: 无法初始化链接服务器(null)的OLE DB提供程序"Microsoft.ACE.OLEDB.12.0"的数据源对象
OLE DB提供程序"Microsoft.ACE.OLEDB.12.0"返回消息"未指定的错误"

但在SQL Server Management Studio中使用管理员凭据运行该存储过程时可正常执行。请问如何以管理员凭据连接数据库运行该存储过程?或若问题由其他原因导致,该如何修复?

解决方案

一、使用管理员凭据连接数据库

如果要在代码中切换为SQL Server管理员账户(而非Windows集成认证)连接,直接修改连接字符串即可:

// 替换为你的SQL Server管理员账户和密码
using (var conn = new SqlConnection("data source=HUSSEIN******;initial catalog=GASCODB;user id=管理员账户名;password=管理员密码;"))

注意:需确保SQL Server已开启SQL Server身份验证模式,且该管理员账户拥有执行目标存储过程、访问Excel文件的权限。

二、排查并修复OLE DB驱动相关问题

这个错误大概率是代码运行时的权限不足或位数不匹配导致的,以下是具体修复方案:

  • 权限不足:代码运行的进程(比如Web应用的应用池账户、控制台程序的运行账户)没有访问Excel文件所在路径的读写权限,也没有OLEDB驱动的执行权限——而SSMS用管理员运行时,账户拥有足够权限。
    修复:给代码运行的账户添加Excel文件所在文件夹的读写权限,同时确保该账户具备OLEDB驱动的执行权限。
  • 位数不匹配:如果你的应用程序是64位,而安装的Microsoft.ACE.OLEDB.12.0是32位(或反过来),就会出现初始化失败。
    修复:
    1. 检查应用程序的目标平台(比如Visual Studio中,右键项目→属性→生成→平台目标),确保和ACE驱动位数一致。
    2. 若需要跨位数运行,安装对应位数的ACE驱动(Access Database Engine的32/64位版本)。
  • SQL Server配置问题:检查SQL Server的OLEDB Provider配置,确保Microsoft.ACE.OLEDB.12.0已启用并允许进程内访问:
    1. 打开SQL Server配置管理器,找到对应实例的“SQL Server服务”,右键属性→登录,确认服务账户拥有足够权限。
    2. 在SSMS中执行以下SQL命令,启用Provider的进程内访问:
      EXEC sp_configure 'show advanced options', 1;
      RECONFIGURE;
      EXEC sp_configure 'Ad Hoc Distributed Queries', 1;
      RECONFIGURE;
      GO
      EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1;
      EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1;
      GO
      

内容的提问来源于stack exchange,提问作者Hussein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 19:23:30