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

时间:2015-09-17 14:25:11

标签: c# .net visual-foxpro

我正在尝试连接到我为使用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:'OLE DB'的.NET Framework数据提供程序'提供程序未在本地计算机上注册。”

我正在谷歌上搜索它并遇到这个msdn page,它说“InvalidOperationException”异常的条件是“连接已经打开”。在这种情况下我认为不会发生这种情况。

我怎样才能让它发挥作用?

PS:接受不同的建议来建立这种联系。

2 个答案:

答案 0 :(得分:2)

要连接到VFP,我强烈建议您下载Visual Foxpro OleDb Provider

然后,连接字符串将被格式化为......

string connectionString = @"Provider=VFPOLEDB.1;Data Source=C:\YourDirectory\"; 

连接应该指向表所在的PATH,就像你现在拥有的那样...人们多次尝试连接到特定的TABLE,但是一旦建立了路径,就可以从任何表中查询文件夹(或子文件夹,如果有的话)。

应该让你更进一步......

答案 1 :(得分:0)

您应该下载并使用VFPOLEDB作为DRapp建议。以下是使用示例数据库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 VFPVFP Entity FrameworkVFP Client for ADO.Net