我使用下面的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;
}
}发布于 2017-06-05 15:41:59
如果有必要使用OleDbCommand执行此操作,则可以使用OleDbDataReader而不是DataTable,并使用GetObject读取每个值。
然后您可以对任何一个值调用ToString()。
但是,如果您有一个包含非类型化数据的CSV文件,那么一次只读取文件一行并拆分值,创建一个List<string[]>可能要容易得多。
This answer展示了读取.csv并拆分每一行的最简单方法。
This answer演示了如果值在不分隔值的引号中包含逗号,则如何做到这一点,比如this,are,separate,"this,is,one"
https://stackoverflow.com/questions/44371472
复制相似问题