Как выбрать тип данных столбца в наборе данных - PullRequest
1 голос
/ 09 февраля 2012

Мне нужно прочитать данные из листа Excel как часть преобразования данных. Некоторые столбцы содержат в основном числовые данные, но могут содержать буквенно-цифровые данные где-то в таблице Excel. Проблема в том, что мое преобразование видит буквенно-цифровые значения как нулевые (или пустые. Использование метода .ToString () возвращает "").

Чтобы подключиться к Excel, я создаю соединение oledb, создаю OleDbDataAdapter, затем заполняю DataSet с помощью адаптера.

Вот код VB для подключения:

private _oleadpt As OleDbDataAdapter
private  _oleconnection As New OleDbConnection

       Dim olecomm As OleDbCommand                
       '_database comes from a settings file and is the full path to an excel document
        Dim connstring As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _database & ";Extended Properties=""Excel 8.0;HDR=YES;"""
        _oleconnection.ConnectionString = connstring

        olecomm = New OleDbCommand
        olecomm.CommandText = "SELECT RegionalBranch, DocumentType, TiffFileNumberReference, VersionNumber, RTSItemNumber, ItemSearch, HeatNumber, RTSVendorNumber, PurchaseOrderNumber, Branch, " + _
            "Quality, CreationDate, CreationTime, ReceiverNumber, ChathamItemNumber, ChathamVendorNumber, ChathamDivision, Processed FROM [Sheet1$]"
        olecomm.Connection = _oleconnection

        _oleadpt = New OleDbDataAdapter(olecomm)
        Dim commandBuilder As OleDbCommandBuilder = New OleDbCommandBuilder(_oleadpt)

        ds = New DataSet
        _oleconnection.Open()
        _oleadpt.Fill(ds)

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

Изменение форматирования столбца в Excel, похоже, не влияет на типы данных в моем наборе данных.

Есть ли способ сообщить адаптеру данных или набору данных, какой тип данных использовать для столбца? Или я должен попытаться преобразовать данные в свой оператор SQL?

Любая помощь будет высоко ценится!

1 Ответ

2 голосов
/ 09 февраля 2012

Я протестировал комментарий выше и обнаружил, что если вы используете провайдер Microsoft.Jet.OLEDB.4.0 для чтения файла Excel, параметр MaxScanScanRows = 0 игнорируется (как описано в этом KB ). Однако, если я переключаюсь на поставщика Microsoft.ACE.OLEDB.12.0 , он работает как положено.

...