如何选择DataSet中列的数据类型

时间:2012-02-08 22:29:27

标签: .net vb.net dataset oledb oledbdataadapter

我需要从Excel工作表中读取数据作为数据转换的一部分。某些列主要包含数字数据,但可能在Excel工作表中的某处包含一些字母数字数据。问题是,我的转换将字母数字值视为null(或空白。使用.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中列的格式似乎不会影响数据集中的数据类型。

有没有办法告诉dataadapter或数据集用于列的数据类型?或者我应该尝试在我的SQL语句中转换数据吗?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

我测试了上面的评论,发现如果您使用 Microsoft.Jet.OLEDB.4.0 提供程序来读取Excel文件,则忽略MaxScanScanRows = 0设置(如本文所述) KB)。但是,如果我切换到 Microsoft.ACE.OLEDB.12.0 提供程序,它会按预期工作。