Есть ли способ заставить все столбцы быть строками при чтении данных из CSV-файла в DataTable? - PullRequest
0 голосов
/ 15 февраля 2019

В настоящее время я работаю над проектом, который требует от меня чтения из файла .csv и импорта данных в базу данных.Все работает нормально, за исключением одного столбца.В файле raw / .csv это поле может состоять как из int / string.Таким образом, при чтении файла, если первый столбец состоит из int, тогда любая из строк, следующих после, не будет прочитана.Но если первое значение оказывается строкой, то все работает как задумано.Есть ли решение для этого, которое я мог бы внедрить в текущее рабочее решение, которое у меня есть.

string sql = @"SELECT * FROM [" + strFileName + "]";    
DataTable rawDataTable = new DataTable();

using (OleDbConnection connection = new OleDbConnection(connString))
using (OleDbCommand command = new OleDbCommand(sql, connection))
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
    adapter.Fill(rawDataTable);
}    

Например, в определенном столбце:покажет 100, оставляя следующие две строки пустыми, а затем покажет 500.

Sample Column
-------------
100
SOME TEXT
SOME MORE TEXT
500

Но если столбец будет похож на следующий пример, он будет работать правильно, читая целые числа как строки.

Sample Column
--------------
100
SOME TEXT
SOME MORE TEXT
500

1 Ответ

0 голосов
/ 16 февраля 2019

Если вы используете драйвер текстового файла OleDb, который выглядит так, как если бы вы были, вы можете использовать файл Schema.ini , чтобы сказать ему сканировать все строки в файле, чтобы определить тип.

Например, если строка подключения выглядит следующим образом:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\txtFilesFolder\;
Extended Properties="text;HDR=Yes;FMT=Delimited";

Затем в c:\txtFilesFolder создайте файл с именем Schema.ini, и если ваше имя файла myfile.csv,содержимое файла схемы будет выглядеть следующим образом:

[myfile.csv]
MaxScanRows=0  

Лично этот подход в общем случае не будет таким, как я бы разбирал текстовые файлы, для этого есть множество хороших библиотек, которые дадут вам больше контроля.

...