【问题标题】:Getting "System.InvalidOperationException" When trying to open and OLE DB connection尝试打开和 OLE DB 连接时出现“System.InvalidOperationException”
【发布时间】:2015-09-17 14:25:10
【问题描述】:

我正在尝试连接到我为使用 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:接受不同的建议来建立这种联系。

【问题讨论】:

标签: c# .net visual-foxpro


【解决方案1】:

对于连接到 VFP,我强烈建议并下载Visual Foxpro OleDb Provider

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

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

连接应该指向您当前拥有的表所在的路径...很多时候人们尝试连接到特定的表,但是一旦建立了路径,您就可以从其中的任何表中查询文件夹(或子文件夹,如果有)。

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

【讨论】:

    【解决方案2】:

    您应该按照 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 VFPVFP Entity FrameworkVFP Client for ADO.Net

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 2018-01-20
      相关资源
      最近更新 更多