2011-07-08 72 views
0

我試圖讀取使用的DataReader OleDb的.dbf文件這樣的讀取DBF文件:使用的IDataReader在C#中

const string OleDbConnectionString = 
    @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydbase;Extended Properties=dBASE IV;"; 
    var connection = new OleDbConnection(OleDbConnectionString); 
    connection.Open(); 

    var command = new OleDbCommand("select * from my.dbf", connection); 

    reader = command.ExecuteReader(); 
    Console.WriteLine(reader.Read()); // true 
    Console.WriteLine(reader[0].ToString()); // exception 

唯一的例外是InvalidCastException型的,並說:無法情況下,從System.__ComObjectIRowset 。 當我試圖用OleDbAdapter來填充表格時,一切正常。
如何使用IDataReader讀取.dbf文件?

+1

什麼是你的選擇命令中的'my.dbf'?如果不是,那該不該是表名呢? – dpp

回答

0

好吧,請嘗試使用的GetString:

const string OleDbConnectionString = 
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydbase;Extended Properties=dBASE IV;"; 
OleDbConnection connection = new OleDbConnection(OleDbConnectionString); 
connection.Open(); 

OleDbCommand command = new OleDbCommand("select * from my.dbf", connection); 

OleDbDataReader reader = command.ExecuteReader(); 
Console.WriteLine(reader.Read()); // true 
Console.WriteLine("{0}", reader.GetString(0)); // exception 
+0

選擇命令不是問題。我使用具有相同連接字符串的DataAdapter獲得了所有工作。我嘗試了你的建議 - 結果是同樣的例外。 – StuffHappens

+0

放置類型沒有幫助。 – StuffHappens

+0

@StuffHappens我剛剛在自己的DBF上運行你的代碼,它工作,你可以把reader.GetString(0));在try/catch中提供異常信息?它是一個無法轉換爲字符串的值嗎? – Andreas

1

我想既然你有「C:\ mybase」您的路徑可能是錯在ConnectionString,然後添加「my.dbf」這些加起來爲「C :\ mybasemy.dbf」。

我提供代碼如何打開並閱讀使用數據集而不是閱讀器的dbf。

string oledbConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\spcs\;Extended Properties=dBASE IV;User ID=Admin;Password="; 

     OleDbConnection oledbConnection = new OleDbConnection(oledbConnectionString); 

     string oledbQuery = @"SELECT * FROM KUND"; 

     try 
     { 
      OleDbCommand oledbCommand = new OleDbCommand(oledbQuery, oledbConnection); 

      OleDbDataAdapter oledbAdapter = new OleDbDataAdapter(oledbCommand); 

      DataSet oledbDataset = new DataSet(); 

      oledbAdapter.FillSchema(oledbDataset, SchemaType.Mapped); 

      oledbConnection.Open(); 

      oledbAdapter.Fill(oledbDataset); 

      foreach (DataRow row in oledbDataset.Tables[0].Rows) 
      { 
       System.Diagnostics.Trace.WriteLine(row[0].ToString()); 
      } 
     } 
     catch (Exception ex) 
     { 
      // Do something with ex 
     } 
+0

感謝您的回答。但我需要用datareader來做,而不是數據集。 – StuffHappens

相關問題