我非常喜欢下面的oledb方法,因为我最终可以针对csv传递sql查询。
问题是oledb只能读取<256列,我还有更多。
有什么方法可以有效地查询c#中具有这种列大小的csv表?
我希望避免将整个csv带到一个datatable中,以便稍后使用linq。
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.Jet.OLEDB.4.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
{
Locale = CultureInfo.CurrentCulture
};
adapter.Fill(dataTable);
return dataTable;
}
}
更新:尝试在以下脚本的建议中添加注解以使用ace驱动程序,但以下oledb连接字符串仍然只能获得255列。仍在寻找实现这一目标的方法。
using (OleDbConnection connection = new OleDbConnection(
"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + pathOnly +"; Extended Properties =\"Text; HDR = Yes; FORMAT = Delimited\""))
1条答案
按热度按时间aurhwmvo1#
像这样的怎么样
如果您的第一行不是标题,则必须使用不同的方法来命名列。