【问题标题】:How to chose the data type of a column in a DataSet如何在 DataSet 中选择列的数据类型
【发布时间】:2012-03-01 10:21:00
【问题描述】:

作为数据转换的一部分,我需要从 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 语句中转换数据?

任何帮助将不胜感激!

【问题讨论】:

标签: .net vb.net dataset oledb oledbdataadapter


【解决方案1】:

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

【讨论】:

  • 感谢您的帮助!似乎 jet 4.0 驱动程序将始终准确扫描 8 行,这对我没有帮助。只是更改为 ACE 12.0 并不能解决问题。即使我添加了 maxscanrows=0。解决方案是将 IMEX=1 添加到连接字符串的扩展属性中。这将所有行都视为文本,这最终是我想要的。这篇文章对我也有帮助:connectionstrings.com/excel-2007。 +1 让我朝着正确的方向前进!
  • 是的,如果不清楚,抱歉。您需要在扩展属性中使用 IMEX=1 和 MaxScanRows=0。很高兴你成功了!
猜你喜欢
  • 2012-12-27
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 2021-10-06
  • 2015-01-07
  • 1970-01-01
  • 2021-01-25
相关资源
最近更新 更多