Установить тип столбца для IDataReader - PullRequest
0 голосов
/ 07 апреля 2020

Я анализирую CSV с IDataReader, который будет использоваться для операции SqlBulkCopy. Таблица назначения для SqlBulkCopy имеет столбец с типом «Время». Массовое копирование завершается неудачно, потому что оно пытается привести DateTime к TimeSpan. Когда я исследую IDataReader, я обнаруживаю, что IDataReader анализирует столбец "actionTime "как DateTime вместо Time. Как я могу заставить IDataReader анализировать «actionTime »как Time или TimeSpan, чтобы SqlBulkCopy работал?

var csvFile = $"{blobSource}.csv";
string connectionString =
    "DSN=testcsv;" + // This is an ODBC Data Source that uses Microsoft Text Driver (*.txt, *.csv)
    $"Dbq={LoadConstants.InputFilesDir};" +
    "Extensions=csv";

using (var con = new OdbcConnection(connectionString))
{
    con.Open();
    var cmdText = $@"SELECT * FROM [{csvFile}]";

    using (var cmd = new OdbcCommand(cmdText, con))
    {
        using (IDataReader reader = cmd.ExecuteReader())
        {
            var schema = reader.GetSchemaTable();
        }
    }
}

Вот файл" TestTimeCol.txt "

transactionTime
11:11:11

Это дамп переменной "схема". IDataReader анализирует столбец как DateTime

This is a dump of the schema variable. IDataReader is parsing the column as a DateTime

Это ошибка, выдаваемая SqlBulkCopy

This is the error thrown by SqlBulkCopy

Мой источник данных "testcsv" использует текстовый драйвер Microsoft

The data source and its driver

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...