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