Как в .Net импортировать значения из CSV в нужном мне формате с помощью OleDB?

У меня есть файл CSV, в котором есть столбец, содержащий строки, которые выглядят как целые числа. То есть с ними следует обращаться как со строками, но, поскольку они являются числами, они кажутся импортируемыми как целые числа (отбрасывая начальные нули).

Пример данных:

  • 0000000000079
  • 0000999000012
  • 0001002000005
  • 0004100000007

Проблема, которую я вижу, заключается в том, что последняя точка данных примера представлена ​​как DBNull.Value. Я предполагаю, что это связано с тем, что OleDB обрабатывает этот столбец как целое число (точки данных также проходят без начальных нулей), и что 0004100000007 больше, чем наибольшее целочисленное значение.

Есть ли способ сказать, что «столбец [0] — это строка, не читайте ее как целое число»? При чтении данных?

Код, который я сейчас использую:

OleDbConnection dbConn = new OleDbConnection(SourceConnectionString);
OleDbCommand dbCommand = new OleDbCommand("SELECT * FROM test.csv", dbConn);
dbConn.Open();
OleDbDataReader dbReader = dbCommand.ExecuteReader();

while (dbReader.Read())
{
    if (dbReader[0] != DBNull.Value)
    {
         // do some work
    }
}

person ChrisHDog    schedule 26.10.2008    source источник


Ответы (5)


Попробуйте использовать метод GetString() в читателе, когда вам нужно прочитать столбец как строку:

string myStringValue = reader.GetString(0);
person mohammedn    schedule 26.10.2008
comment
Я не часто использую этот тип кода, я не знал о методе GetString... Хорошо. - person Brian Schmitt; 26.10.2008

Вы контролируете процесс экспорта? Если да, то можно ли экспортировать данные в CSV с кавычками вокруг строковых элементов?

Если это одно из заданий, просто импортируйте файл в предопределенную таблицу SQL с помощью служб Integration Services, но я подозреваю, что это будет повторяющаяся задача.

person Michael Prewecki    schedule 05.11.2008

Существует файл Schema.ini, который необходимо использовать для указания информации о файле. Он включает типы и длину полей, наличие заголовков столбцов и разделитель полей.

Вот информация MSDN об этом.
http://msdn.microsoft.com/en-us/library/ms709353.aspx

person JoelHess    schedule 23.02.2009

Пробовали ли вы использовать этот читатель CSV? Это вообще очень уважают. Возможно, попробуй...

person Marc Gravell    schedule 26.10.2008

Я не эксперт, но вы справляетесь с фиксированным форматом файла? http://csharptutorial.com/blog/exclusive-how-to-export-a-datatable-to-a-fixed-file-format-the-easy-way-using-odbc-or-jet-engine/

person user310291    schedule 17.04.2011