我试图连接到一个Visual FoxPro数据库,我下载使用OLE DB测试的目的,这是我的代码:
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);
}
}
问题是我得到"系统"。InvalidOperationException: '。没有在本地机器上注册OLE DB提供程序的。NET框架数据提供程序。
我正在搜索它,遇到这个msdn页面,说异常"InvalidOperationException"有条件"连接已经打开。"我不认为这种情况会发生。
我怎样才能使它工作?
PS:接受不同的建议来建立这个连接
要连接到VFP,我强烈建议下载Visual Foxpro OleDb Provider。
然后,连接字符串将被格式化为…
string connectionString = @"Provider=VFPOLEDB.1;Data Source=C:YourDirectory";
连接应该指向当前表所在的PATH…很多时候,人们尝试连接到特定的TABLE,但是一旦建立了路径,您就可以从该文件夹(或子文件夹,如果有的话)中的任何表进行查询。
您应该按照DRapp的建议下载并使用VFPOLEDB。下面是使用示例数据库Northwind数据的示例:
private void ReadMyData()
{
var builder = new OleDbConnectionStringBuilder();
builder.Provider = "VFPOLEDB";
builder.DataSource = @"C:Program Files (x86)Microsoft Visual FoxPro 9SamplesNorthwind";
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实体框架和VFP客户端for ADO.Net