获取 "System.InvalidOperationException" 尝试打开 OLE DB 连接时
Getting "System.InvalidOperationException" When trying to open and OLE DB connection
我正在尝试连接到我为测试目的使用 OLE DB 下载的 Visual FoxPro 数据库,这是我的代码:
private void ReadMyData() {
String dbProvider = "Provider=.NET Framework Data Provider for OLE DB;";
String dbSource = "Data Source=VFPOLEDB.C:\USERS\X\DESKTOP\LOG;";
String connectionString = dbProvider + dbSource;
OleDbConnection FPDBConn = new OleDbConnection(connectionString);
OleDbCommand FPDBCmd;
string sql = null;
sql = "Select * from clogbook";
try {
FPDBConn.Open();
FPDBCmd = new OleDbCommand(sql, FPDBConn);
OleDbDataReader FPDBReader = FPDBCmd.ExecuteReader();
while (FPDBReader.Read()) {
Debug.Write(FPDBReader.GetInt32(0) + ", " + FPDBReader.GetString(1));
}
FPDBReader.Close();
FPDBCmd.Dispose();
FPDBConn.Close();
} catch (Exception ex)
{
Debug.Write("Can not open connection ! " + ex);
}
}
问题是我得到 "System.InvalidOperationException: The '.NET Framework Data Provider for OLE DB' provider is not registered on the local machine."
我在谷歌上搜索它并发现了这个 msdn page 说异常 "InvalidOperationException" 有条件 "The connection is already open." 我认为在这种情况下不会发生。
我怎样才能让它工作?
PS: 接受不同的建议以建立此连接。
为了连接到 VFP,我强烈建议下载 Visual Foxpro OleDb Provider。
然后,连接字符串的格式将类似于...
string connectionString = @"Provider=VFPOLEDB.1;Data Source=C:\YourDirectory\";
连接应该指向 table 所在的 PATH,正如您当前所拥有的...很多时候人们尝试连接到特定的 TABLE,但是一旦路径建立,您可以从该文件夹(或子文件夹,如果可用)中的任何 table 进行查询。
应该让你更进一步......
您应该按照 DRapp 的建议下载并使用 VFPOLEDB。下面是一个使用示例数据库 Northwind 数据的示例:
private void ReadMyData()
{
var builder = new OleDbConnectionStringBuilder();
builder.Provider = "VFPOLEDB";
builder.DataSource = @"C:\Program Files (x86)\Microsoft Visual FoxPro 9\Samples\Northwind";
string sql = "Select * from Customers where Country like ?";
using (OleDbConnection con = new OleDbConnection(builder.ConnectionString))
using (OleDbCommand cmd = new OleDbCommand(sql, con))
{
cmd.Parameters.AddWithValue("@country", "USA");
try
{
con.Open();
var reader = cmd.ExecuteReader();
while (reader.Read())
{
Debug.WriteLine("{0}, {1}",
reader["CustomerId"],
reader["CompanyName"]);
}
con.Close();
}
catch (Exception ex)
{
Debug.Write("Can not open connection ! " + ex);
}
}
}
注意参数不是命名而是位置。
PS:同时查看 Tom Brothers 的 Linq To VFP, VFP Entity Framework and VFP Client for ADO.Net。
我正在尝试连接到我为测试目的使用 OLE DB 下载的 Visual FoxPro 数据库,这是我的代码:
private void ReadMyData() {
String dbProvider = "Provider=.NET Framework Data Provider for OLE DB;";
String dbSource = "Data Source=VFPOLEDB.C:\USERS\X\DESKTOP\LOG;";
String connectionString = dbProvider + dbSource;
OleDbConnection FPDBConn = new OleDbConnection(connectionString);
OleDbCommand FPDBCmd;
string sql = null;
sql = "Select * from clogbook";
try {
FPDBConn.Open();
FPDBCmd = new OleDbCommand(sql, FPDBConn);
OleDbDataReader FPDBReader = FPDBCmd.ExecuteReader();
while (FPDBReader.Read()) {
Debug.Write(FPDBReader.GetInt32(0) + ", " + FPDBReader.GetString(1));
}
FPDBReader.Close();
FPDBCmd.Dispose();
FPDBConn.Close();
} catch (Exception ex)
{
Debug.Write("Can not open connection ! " + ex);
}
}
问题是我得到 "System.InvalidOperationException: The '.NET Framework Data Provider for OLE DB' provider is not registered on the local machine."
我在谷歌上搜索它并发现了这个 msdn page 说异常 "InvalidOperationException" 有条件 "The connection is already open." 我认为在这种情况下不会发生。
我怎样才能让它工作?
PS: 接受不同的建议以建立此连接。
为了连接到 VFP,我强烈建议下载 Visual Foxpro OleDb Provider。
然后,连接字符串的格式将类似于...
string connectionString = @"Provider=VFPOLEDB.1;Data Source=C:\YourDirectory\";
连接应该指向 table 所在的 PATH,正如您当前所拥有的...很多时候人们尝试连接到特定的 TABLE,但是一旦路径建立,您可以从该文件夹(或子文件夹,如果可用)中的任何 table 进行查询。
应该让你更进一步......
您应该按照 DRapp 的建议下载并使用 VFPOLEDB。下面是一个使用示例数据库 Northwind 数据的示例:
private void ReadMyData()
{
var builder = new OleDbConnectionStringBuilder();
builder.Provider = "VFPOLEDB";
builder.DataSource = @"C:\Program Files (x86)\Microsoft Visual FoxPro 9\Samples\Northwind";
string sql = "Select * from Customers where Country like ?";
using (OleDbConnection con = new OleDbConnection(builder.ConnectionString))
using (OleDbCommand cmd = new OleDbCommand(sql, con))
{
cmd.Parameters.AddWithValue("@country", "USA");
try
{
con.Open();
var reader = cmd.ExecuteReader();
while (reader.Read())
{
Debug.WriteLine("{0}, {1}",
reader["CustomerId"],
reader["CompanyName"]);
}
con.Close();
}
catch (Exception ex)
{
Debug.Write("Can not open connection ! " + ex);
}
}
}
注意参数不是命名而是位置。
PS:同时查看 Tom Brothers 的 Linq To VFP, VFP Entity Framework and VFP Client for ADO.Net。