2009-05-16 9 views
1

は、標準的な拡張子のないファイルがありますそれは、テストと呼ばれるdBASEファイルを見つけることができないので、これがクラッシュしたが、私はTEST.DBFするファイルの名前を変更する場合、それは正常に動作します。もちろん、読み取り、dBASEファイルは、私はちょうどdBASEファイルであるファイルを読み込むしようとしています

string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Temp;Extended Properties=dBase III"; 
      OleDbConnection dBaseConnection = new OleDbConnection(ConnectionString); 
      dBaseConnection.Open(); 

      OleDbDataAdapter oDataAdapter = new OleDbDataAdapter("SELECT * FROM Test", ConnectionString); 
      DataSet oDataSet = new DataSet(); 
      oDataAdapter.Fill(oDataSet);//I get the error right here... 
      DataTable oDataTable = oDataSet.Tables[0]; 
      foreach (DataRow dr in oDataTable.Rows) 
      { 
       Console.WriteLine(dr["Name"]); 
      } 

:試してみて、ファイルを読み込むためのコードのブロック。私は本当にファイルの名前を変更することはできません。なぜなら、サードパーティ製のアプリケーションはファイル形式としてそのファイルを使用するからです。

誰かがC#で標準拡張機能なしでdbaseファイルを読む方法を知っていますか?

ありがとうございました。

+0

ファイルの大きさはどれくらいですか?あなたがそれを読んでみたいと思えば、おそらくそれをコピーして(ファイル拡張子を加えて)コピーしてみてください。 –

+0

@Nathan - あなたはそれを理解しましたか?私は非常に答えに興味があるでしょう。 – DefenestrationDay

答えて

1

あなたのコードについて私を混乱させるのは、あなたのConnectionStringを作成する方法です。

string databaseFile = "test.dat"; 
string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Temp\" + databaseFile +";Extended Properties=dBase III"; 

パスのデータソースの部分にファイル名を設定するとき、私は関係なく、それが何であるか、任意のファイルタイプ/拡張子の問題を抱えていたことがありません:私はこのようにそれを行うだろう。

SELECTステートメントでは、 "SELECT * FROM Test"は "Test"という名前のファイルではなく、データベース内の "Test"という名前のテーブルからすべてのデータを選択しています。

私はdBaseファイルを扱っていませんが、私の推測では、データソースがC#でデフォルトのdBase拡張子を使用したいファイルを見つけ出すのに十分であると考えられます。デフォルトの拡張子を使用していない場合特定のファイル名を追加して、動作するかどうか確認してください。

+0

dBaseのDataSourceはカタログ(フォルダ)でなければなりません。* .dbfがSELECTクエリで見つかるか、次の構文を使用する必要があります: 'FIELD-NAME from file .dbf'はdBaseがテーブルデータベースであるため、構造内に複数のテーブルがありません。そのため、クエリで* .dbfファイルを選択しています(通常db ) –

関連する問題