我正在使用下面的OleDbCommand多次读取文件方法。我遇到的问题是,大部分时间它将数据类型作为字符串返回,但偶尔(取决于正在读取的数据)返回的int类型。有没有办法请求所有列返回为字符串,而不必在加载后转换所有列?
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 :(得分:0)
如果需要使用OleDbCommand
执行此操作,那么您可以使用OleDbDataReader
代替DataTable
,并使用GetObject
读取每个值。< / p>
然后,您可以在任何值上调用ToString()
。
但是如果你有一个包含无类型数据的CSV文件,那么一次只读取一行文件并拆分值可能要容易得多,创建一个List<string[]>
。
This answer显示了读取.csv并拆分每一行的最简单方法。
This answer显示了如果值包含引号内的逗号分隔值,例如this,are,separate,"this,is,one"