Excel到VB:无法读取零后面

我正在做一个与Excel的连接,我有一个问题,当我尝试使用一个ID有0后面…

我正在使用一个ListBox并从Excel的工作表中添加ID作为项目。 ID有9个数字,如“123456789”或“098765430”。 因此,我删除了最后4个字符来search具有相同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 

您的Excel文件具有作为整数值input的ID列,但是格式化为左零填充以呈现为九个字符的字段。 您的Excel数据库连接正在读取值作为数字(键入Double,即使 – 虽然他们是整数)。 您的原始select语句隐式地将ID转换为Like比较的string; 然而,这个转换不会现在你想要的左零填充。 要使用这种types的比较,您需要自己格式化ID

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

正如你在上面的评论中指出的那样,这是有效的。 但是,速度并不是最高效的。 由于ID是数字,因此进行数字比较应该更快。 您已经定义了一个名为prodStringvariables,下面的解决scheme使用该variables来准备一个数字值,以便根据您的条件构build一个替代select。

Dim prodNum As Int32 = Int32.Parse(prod) * 10000I

然后Select语句将变成:

"Select * From [sheet1$] Where ((([ID]\10000) * 10000)=" & prodNum.ToString & ")"

这些示例使用连接的select语句,理想情况下,您不会这样做,而是使用具有replace值的参数化语句。 我会把这个练习留给你来执行。