2017-06-05 118 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"