0

我正在尝试阅读 Excel 页面,但出现以下错误:

输入字符串的格式不正确。无法在 PHONE_NUM 列中存储 <555-555-5555>。预期类型为 Double。

似乎 oledb 命令期望该列是 double 类型(但实际上,它是一个电话号码字符串)。我想我在某处读到了这种情况,因为该命令看起来是列中的前几个项目,并确定了应该基于什么类型。无论如何总是将所有值作为字符串读取?

这是我正在使用的代码:

Dim connection As OleDb.OleDbConnection
Dim command As OleDb.OleDbCommand
Dim adapter As New OleDb.OleDbDataAdapter
Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + myFile + ";Extended Properties=Excel 12.0;"
Dim pgOne As String = "Page1$"
Dim pgTwo As String = "Page2$"
Dim selectOne As String = "SELECT * FROM [" & pgOne & "] WHERE COL1<>''"
Dim selectTwo As String = "SELECT * FROM [" & pgTwo & "]"

connection = New OleDb.OleDbConnection(connString)
Try
   If connection.State = ConnectionState.Open Then
   Else
      connection.Open()
   End If

   command = New OleDb.OleDbCommand(selectOne, connection)
   adapter.SelectCommand = command
   adapter.Fill(ds, "Table1")

   adapter.SelectCommand.CommandText = selectTwo
   adapter.Fill(ds, "Table2")
Catch ex As OleDb.OleDbException
Finally
   adapter.Dispose()
   If (Not command Is Nothing) Then
      command.Dispose()
   End If
   connection.Close()
End Try
4

2 回答 2

0

您可以通过以下两种方式之一将表格填充为字符串。如果您只想将它​​们作为字符串读取,则可以将一部分添加到连接字符串中,该部分应将混合数据类型列读取为文本。或者,通过将标题行作为数据读取来将它们强制转换为字符串类型。您也可以使用模式来读取表定义,但如果这些对您不起作用,我需要找到更多信息。

第一个选项更简单:

首先更改您的连接字符串以添加 IMEX=1

'Add IMEX=1
Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;IMEX=1;Data Source=" + myFile + ";Extended Properties=Excel 12.0;"

然后,这应该为您提供String基于行中具有混合数据类型的任何数据列的列。

另一种方法是通过指定连接字符串中没有标题行将标题行读取为数据行来强制字符串列类型。然后,您可以在之后删除它以获得一个字符串数据列。

'Add HDR=NO
Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;HDR=NO;Data Source=" + myFile + ";Extended Properties=Excel 12.0;"

如果这些对您不起作用,我会进行更多研究。

于 2013-06-25T11:32:26.547 回答
0

如前所述,我无法解决这个问题,所以我最终手动创建了一个模式并在绑定数据时对其进行格式化。

于 2013-07-25T15:35:51.757 回答