【发布时间】:2020-02-29 14:51:31
【问题描述】:
string sqlConnectionString = String.Format(@"Data Source={0};Initial Catalog={1};Integrated Security=True;MultipleActiveResultSets=True", server, database);
string mdbConnectionString = String.Format(@"Provider=Microsoft.JET.OLEDB.4.0;data source={0};", @"C:\test\test.mdb");
using (var mdbConnection = new OleDbConnection(mdbConnectionString))
using (var sqlConnection = new SqlConnection(sqlConnectionString))
{
mdbConnection.Open();
sqlConnection.Open();
// Empty table
var sqlQuery = String.Format("DELETE FROM Languages");
var sqlCommand = new SqlCommand(sqlQuery, sqlConnection);
sqlCommand.ExecuteNonQuery();
// Fill table with new information
sqlQuery = String.Format("INSERT INTO Languages (ID, lang) " +
"SELECT ID, lang " +
"FROM OPENROWSET('" + mdbConnection.Provider + "', '" + mdbConnection.DataSource + "'; 'admin'; '', Languages)");
sqlCommand = new SqlCommand(sqlQuery, sqlConnection);
sqlCommand.ExecuteNonQuery();
}
第二个sqlCommand在调用ExecuteNonQuery时抛出这个错误:
System.Data.SqlClient.SqlException:“无法为链接服务器“(null)”创建 OLE DB 提供程序“Microsoft.JET.OLEDB.4.0”的实例。”。
我错过了什么?
【问题讨论】:
-
变量“服务器”是否设置为有效的 SQL Server?看起来异常是由于与服务器的连接失败。 Sql Client 连接不应使用 JET。未发布的代码有问题。使用批量复制。请参阅:docs.microsoft.com/en-us/dotnet/api/…
-
openrowset是从 SQL Server 的角度执行的。即:除非 Access 文件位于 SQL Server 上的C:\test\test.mdb并且运行 SQL Server 的 Windows 帐户具有适当的文件系统访问权限,否则它将无法工作。 -
@AlwaysLearning Access 文件将位于运行 SQL Server 的同一台机器上。
-
@jdweng 与
BulkCopy配合得很好
标签: c# sql sql-server ms-access oledb