Excel到VB:无法读取零背后

时间:2016-03-03 15:46:15

标签: vb.net excel

我正在与excel建立连接,当我尝试使用0后面的ID时出现问题...

我正在使用ListBox并将excel工作表中的ID添加为项目。 ID有9个数字,如“123456789”或“098765430”。因此,我删除最后4个字符以搜索具有相同5个数字的ID,并添加另一个ListBox。它工作正常,除了后面有0(零)的代码。

Dim ConnectionString As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\Tabela_Precos.xlsx; Extended Properties=Excel 12.0;")
        ConnectionString.Open()

        Dim ds As New DataSet
        Dim dt As New DataTable
        ds.Tables.Add(dt)
        Dim da

For i = 0 To Form1.ListBox1.Items.Count - 1

        Dim str As String = Compras.ListBox1.Items(i).ToString
        Dim prod As String = str.Remove(str.Length - 4)
        da = New OleDbDataAdapter("SELECT * FROM [Sheet1$] WHERE ID like '%" & prod & "%'", ConnectionString)

        ListBox1.Items.Add(dt.Rows(i).Item(0))
Next

1 个答案:

答案 0 :(得分:1)

您的Excel文件将 ID 列作为整数值输入,但格式化为左零填充以呈现为九个字符的字段。您的Excel数据库连接正在将值读取为数字(类型为Double,偶数 - 尽管它们是整数)。您的原始select语句将 ID 隐式转换为Like比较的字符串;但是,此转换现在不需要左零填充。要使用此类比较,您需要自己格式化 ID

Select * From [sheet1$] Where (Format([ID], ""000000000"") Like '" & prod & "%')"

正如您在上面的评论中指出的那样,这是有效的。但是,就速度而言,它并不是最有效的。由于 ID 是数字,因此进行数值比较应该更快。您已经定义了名为String的{​​{1}}变量,以下解决方案使用该变量来准备数值,以便根据您的条件构建备用选择。

prod

然后Dim prodNum As Int32 = Int32.Parse(prod) * 10000I语句将成为:

Select

这些示例使用连接的select语句,理想情况下,您不会这样做,而是使用带有替换值的参数化语句。我将这项练习留给你演出。