尝试打开和 OLE DB 连接时获取"System.InvalidOperationException"



我试图连接到一个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

相关内容

最新更新