【发布时间】: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