У меня есть следующий метод OleDb, который мне очень нравится, потому что я могу в конечном итоге передать SQL запросов к csv.
Проблема в том, что OleDb может читать только <256 столбцов, а у меня их больше. </p>
Что является альтернативой эффективному запросу таблицы csv в C# с таким размером столбца?
Я бы хотел избежать переноса всего csv в таблицу данных для более позднего 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 столбцов. Все еще ищу способ достичь sh этого.
using (OleDbConnection connection = new OleDbConnection(
"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + pathOnly +"; Extended Properties =\"Text; HDR = Yes; FORMAT = Delimited\""))