【问题标题】:Running a SQL Server stored proecdure with OPENROWSET in VB.Net在 VB.Net 中使用 OPENROWSET 运行 SQL Server 存储过程
【发布时间】:2019-07-10 23:53:20
【问题描述】:

我正在尝试通过 VB.net 自动将 Excel 工作表中的表格导入 SQL 数据库中的表格。到目前为止,我已经完成了以下工作:

我在数据库中创建了一个存储过程,它通过 openrowset 导入表:

CREATE PROCEDURE ImportTable   
AS   
    SET NOCOUNT ON;  

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

    SELECT * 
    INTO [Table]
    FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                    'Excel 12.0; Database=C:\ExcelFile.xlsm', Table$);
GO  

创建此过程后,在 SSMS 中执行时可以完美运行。

然后我在 VB.net 中编写了一个脚本来运行具有相同登录详细信息的存储过程:

    Dim ConnectionString As String
    Dim sqlCon As SqlConnection

    ' Open a database connection and use it to run the stored procedure

    ConnectionString = "Data Source=ServerName;" &
                       "Initial Catalog=DBName;" &
                       "User=UserName;" &
                       "Password=Password;" &
                       "Integrated Security=SSPI;"

    sqlCon = New SqlConnection(ConnectionString)

    Using (sqlCon)

        Dim sqlComm As New SqlCommand

        sqlComm.Connection = sqlCon

        sqlComm.CommandText = "ImportTable"
        sqlComm.CommandType = CommandType.StoredProcedure

        sqlCon.Open()

        sqlComm.ExecuteNonQuery()

    End Using

但是,当我尝试在 VB.net(或 VB excel)中运行 SP 时,出现以下错误:

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

我环顾四周,发现了多个线程来让它在 SSMS 中运行,但对于它在 SSMS 中运行良好但在 VB.net 中运行不正常的情况没有解决方案。

知道为什么 SP 不会通过 SSMS 外部的方法运行吗?

克雷格

【问题讨论】:

  • 我的第一个猜测是它不适用于 SSMS 之外的 Windows 身份验证。您可能需要在 DB 上使用名称和密码设置管理员用户,例如“sa”,并使用这些凭据。它可能不需要管理员,我不确定,但我认为它需要在 Sql Server DB 上进行用户设置。
  • 嗨,我尝试在 VB.Net 中运行 SP,同时使用 Windows 身份验证和我为数据库创建的管理员帐户。两者都在 SSMS 中工作,但不在它之外:s
  • 您是否真的在传递用户 ID/密码并指定集成安全性?尽量不要那样做。
  • 我刚刚删除了该行,但恐怕仍然会出现同样的错误。

标签: sql sql-server vb.net stored-procedures


【解决方案1】:

首先确保 Excel 文件未打开。

然后您需要检查您是否安装了Microsoft OLEDB ACE 12.0 驱动程序工作所必需的2007 Office System Driver: Data Connectivity Components。

或者你可以

USE [master] 

GO 

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1 

GO 

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1 

GO 

不错Link

【讨论】:

  • 您好 Sandeep,感谢您的快速回复。我已经尝试了您的建议,并且还完成了您提供的链接中的每一点,但恐怕仍然没有乐趣。
猜你喜欢
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 2016-04-28
相关资源
最近更新 更多