无法为链接服务器“(空)”初始化 OLE DB 提供程序 "Microsoft.Jet.OLEDB.4.0" 的数据源对象
Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)"
我遇到了这样的错误
'无法为链接服务器“(null)”初始化 OLE DB 提供程序 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。
链接服务器“(null)”的 OLE DB 提供程序 "Microsoft.Jet.OLEDB.4.0" 返回消息 "Could not find installable ISAM."。在将数据库从 msaccess 传输到 SQL
时
这段代码是我写的
try
{
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
DataTable userTables = null;
using (connection)
{
string mappath = dataGridView1.CurrentRow.Cells["Path"].Value.ToString();
string[] filePaths = Directory.GetFiles(@"" + mappath + "", "*.mdb", SearchOption.TopDirectoryOnly);
// c:\test\test.mdb
foreach (string tr in filePaths)
{
connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + tr + "";
string[] restrictions = new string[4];
restrictions[3] = "Table";
connection.Open();
userTables = connection.GetSchema("Tables", restrictions);
List<string> tableNames = new List<string>();
for (int i = 0; i < userTables.Rows.Count; i++)
tableNames.Add(userTables.Rows[i][2].ToString());
try
{
foreach (string tableName in tableNames)
{
cn1 = new SqlConnection(con);
if (cn1.State != ConnectionState.Open) { cn1.Open(); }
SqlCommand cmd = new SqlCommand("select * into [" + tableName + "] from OPENROWSET('Microsoft.Jet.OLEDB.4.0','" + tr + "',[" + tableName + "])");
cmd.Connection = cn1;
cmd.ExecuteNonQuery();---Got error Here
}
}
catch (Exception Ex) { connection.Close(); }
connection.Close();
}
}
}
catch (Exception Ex) { }
你能解决这个错误吗
看起来您正在尝试使用错误的连接字符串连接到 SQL 服务器(我假设您正在尝试将信息从 MS Access 复制到 MS SQL 服务器)。
有效的 MS SQL 服务器连接字符串应如下所示:Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
有关连接字符串的更多信息,请查看:http://www.connectionstrings.com
我对我的本地环境做了一个简单的测试,下面的效果非常好(这是来自 C# 控制台应用程序):
static void Main(string[] args)
{
string accessConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\WhosebugDemo\MyAccessDb.mdb;User Id=admin;Password =; ";
using (DbConnection accessConnection = new OleDbConnection(accessConnectionString))
{
accessConnection.Open();
using (DbCommand accessCommand = new OleDbCommand())
{
string accessQuery =
"SELECT * INTO [MySqlTable] IN '' [ODBC;Driver={SQL Server};Server=(local);Database=MySqlDb;Uid=username;Pwd=password;] FROM [MyAccessTable]";
accessCommand.CommandText = accessQuery;
accessCommand.Connection = accessConnection;
accessCommand.ExecuteNonQuery();
}
}
}
我已经使用 MS Access 2002 数据库作为源并使用 SQL Server 2014 数据库作为目标进行了测试。
希望对您有所帮助。
我遇到了这样的错误
'无法为链接服务器“(null)”初始化 OLE DB 提供程序 "Microsoft.Jet.OLEDB.4.0" 的数据源对象。 链接服务器“(null)”的 OLE DB 提供程序 "Microsoft.Jet.OLEDB.4.0" 返回消息 "Could not find installable ISAM."。在将数据库从 msaccess 传输到 SQL
时这段代码是我写的
try
{
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
DataTable userTables = null;
using (connection)
{
string mappath = dataGridView1.CurrentRow.Cells["Path"].Value.ToString();
string[] filePaths = Directory.GetFiles(@"" + mappath + "", "*.mdb", SearchOption.TopDirectoryOnly);
// c:\test\test.mdb
foreach (string tr in filePaths)
{
connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + tr + "";
string[] restrictions = new string[4];
restrictions[3] = "Table";
connection.Open();
userTables = connection.GetSchema("Tables", restrictions);
List<string> tableNames = new List<string>();
for (int i = 0; i < userTables.Rows.Count; i++)
tableNames.Add(userTables.Rows[i][2].ToString());
try
{
foreach (string tableName in tableNames)
{
cn1 = new SqlConnection(con);
if (cn1.State != ConnectionState.Open) { cn1.Open(); }
SqlCommand cmd = new SqlCommand("select * into [" + tableName + "] from OPENROWSET('Microsoft.Jet.OLEDB.4.0','" + tr + "',[" + tableName + "])");
cmd.Connection = cn1;
cmd.ExecuteNonQuery();---Got error Here
}
}
catch (Exception Ex) { connection.Close(); }
connection.Close();
}
}
}
catch (Exception Ex) { }
你能解决这个错误吗
看起来您正在尝试使用错误的连接字符串连接到 SQL 服务器(我假设您正在尝试将信息从 MS Access 复制到 MS SQL 服务器)。
有效的 MS SQL 服务器连接字符串应如下所示:Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;
有关连接字符串的更多信息,请查看:http://www.connectionstrings.com
我对我的本地环境做了一个简单的测试,下面的效果非常好(这是来自 C# 控制台应用程序):
static void Main(string[] args)
{
string accessConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Temp\WhosebugDemo\MyAccessDb.mdb;User Id=admin;Password =; ";
using (DbConnection accessConnection = new OleDbConnection(accessConnectionString))
{
accessConnection.Open();
using (DbCommand accessCommand = new OleDbCommand())
{
string accessQuery =
"SELECT * INTO [MySqlTable] IN '' [ODBC;Driver={SQL Server};Server=(local);Database=MySqlDb;Uid=username;Pwd=password;] FROM [MyAccessTable]";
accessCommand.CommandText = accessQuery;
accessCommand.Connection = accessConnection;
accessCommand.ExecuteNonQuery();
}
}
}
我已经使用 MS Access 2002 数据库作为源并使用 SQL Server 2014 数据库作为目标进行了测试。
希望对您有所帮助。