2017-06-05 12 views
0

私は、ファイルのメソッドから複数回読み出すには、以下のOleDbCommandを使用しています。私が抱えている問題は、データ型を文字列として返すことがほとんどですが、ときどき(データの内容によっては)返されるint型が返されることです。すべての列が一度ロードされると変換することなく、文字列として返すように要求する方法はありますか?の定義のOleDbCommand戻り値の型

static DataTable GetDataTableFromCsv(string path, bool isFirstRowHeader) 
    { 
     string header = isFirstRowHeader ? "Yes" : "No"; 

     string pathOnly = Path.GetDirectoryName(path); 
     string fileName = Path.GetFileName(path); 

     string sql = @"SELECT * FROM [" + fileName + "]"; 

     using (OleDbConnection connection = new OleDbConnection(
        @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pathOnly + 
        ";Extended Properties=\"Text;HDR=" + header + "\"")) 
     using (OleDbCommand command = new OleDbCommand(sql, connection)) 
     using (OleDbDataAdapter adapter = new OleDbDataAdapter(command)) 
     { 
      DataTable dataTable = new DataTable(); 
      dataTable.Locale = CultureInfo.CurrentCulture; 
      adapter.Fill(dataTable); 

      return dataTable; 
     } 
    } 
+0

は、あなたが '' LINQ''を聞いたことがありますように、それを行う方法を示していますか?これは、LINQでもっと簡単に行うことができるようなものです。 – abhi

+0

@abhiテキストファイルからのDatatable?私は上記のものを与えられた例が大好きです。 – windowskm

+0

スキーマファイルが必要です。 https://stackoverflow.com/questions/12259562/how-can-i-create-schema-ini-file-i-need-to-export-my-csv-file-to-datagridview:次の投稿を参照してください。 – jdweng

答えて

0

それはOleDbCommandその後、あなたの代わりにDataTableOleDbDataReaderを使用してGetObjectを使用して、各値を読むことができるを使用して、これを実行する必要があります場合。

その後、値のいずれかにToString()を呼び出すことができます。

ただし、タイプされていないデータを含むCSVファイルがある場合は、一度に1行ずつファイルを読み取り、値を分割してList<string[]>を作成する方がはるかに簡単です。

This answerは.CSVを読み取り、各ラインを分割する最も簡単な方法を示しています。

This answer

は、値が値を制限するものではない引用符内のカンマが含まれている場合 this,are,separate,"this,is,one"

関連する問題