2017-06-05 115 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來自textfile的數據表?會喜歡上面給出的例子。 – 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,那麼你可以使用一個OleDbDataReader代替DataTable和讀取使用GetObject每個值執行。

然後你可以在任何值上調用ToString()

但是,如果您有一個包含無類型數據的CSV文件,那麼一次只讀取一行文件並拆分這些值可能會更容易,從而創建一個List<string[]>

This answer顯示讀取.csv和拆分每一行的最簡單方法。

This answer展示瞭如何做到這一點如果值包含不分隔值引號中的逗號,像this,are,separate,"this,is,one"