2013-04-28 67 views
0

当我尝试在VB.Net中将参数化的sql语句运行到ms-access数据库(.accdb)时,我总是收到data type mismatch in criteria expression错误消息。标准表达式中的数据类型不匹配。

问题出在@PartNumber,我知道的很多,因为我直接对它进行硬编码以获得数组的值,并且它工作正常。我只是不知道如何解决它。

在表PartNumber是文本字段,并且它是在VB.Net一个字符串,它的长度是在表20和是远不在VB形式20中被读取。

这里是有问题的代码:

For i As Integer = 0 To trackParts.GetUpperBound(0) - 1 
    If (trackParts(i, 4) = "1") Then 
     cmd.CommandText = "INSERT INTO ServiceParts ([IncidentNumber], [PartNumber], [Quantity]) Values (@IncidentNumber, @PartNumber, @Quantity);" 
     cmd.Parameters.AddWithValue("@IncidentNumber", incidentNumberLabel.Text() 
        .ToString().ToUpper().Trim()) 
     cmd.Parameters.AddWithValue("@PartNumber", trackParts(i, 0) 
        .ToString.ToUpper().Trim()) 
     cmd.Parameters.AddWithValue("@Quantity", Convert.ToInt32(trackParts(i, 3))) 
     cmd.ExecuteNonQuery() 
    End If 
Next 

在此先感谢您的帮助,如果有任何需要的信息只是让我知道,我会发布它。我还会用我尝试过的新事物更新这个新事物,因为我想要尝试新事物。

+0

发表表格定义。这可能与表中定义的列类型和数据不匹配。 – RBarryYoung 2013-04-28 22:25:15

+0

尝试将'trackParts(I,0)'分配给正确类型的临时变量,并使用“AddWithValue”调用中的临时变量。 – 2013-04-28 22:38:38

+0

我该如何发表表格定义?发布文本太长了。 但是表格中的PartNumber是数据类型TEXT,而我发送给它的是ToString(),而不管它是否是String数据类型。 编辑:彼得,我已经试过了。给出同样的错误。 – Josiah 2013-04-28 22:46:58

回答

0

虽然这不是一个真正的答案本身,它是确切代码中的Visual Web Developer 2010年我对你的For循环的内容进行的唯一更改正常工作对我来说,我改变循环结束条件从trackParts.GetUpperBound(0) - 1trackParts.GetUpperBound(0),因为我的测试数据数组只有一行。

表:[ServiceParts]
IncidentNumber - 文本(255)
部分号码 - 文本(255)
数量 - 数字(长整型)
(无PK,无索引)

看看这里有一些东西与你的代码在做什么有些不同:

Public Class _Default 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    End Sub 

    Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim trackParts(0, 4) As String 
     trackParts(0, 0) = "PartNumber01" 
     trackParts(0, 1) = "filler" 
     trackParts(0, 2) = "filler" 
     trackParts(0, 3) = "3" 
     trackParts(0, 4) = "1" 

     Dim con As New OleDb.OleDbConnection 
     con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\__tmp\testData.accdb;" 
     con.Open() 
     Dim cmd As New OleDb.OleDbCommand 
     cmd.Connection = con 
     For i As Integer = 0 To trackParts.GetUpperBound(0) 
      If (trackParts(i, 4) = "1") Then 
       cmd.CommandText = "INSERT INTO ServiceParts ([IncidentNumber], [PartNumber], [Quantity]) Values (@IncidentNumber, @PartNumber, @Quantity);" 
       cmd.Parameters.AddWithValue("@IncidentNumber", incidentNumberLabel.Text().ToString().ToUpper().Trim()) 
       cmd.Parameters.AddWithValue("@PartNumber", trackParts(i, 0).ToString.ToUpper().Trim()) 
       cmd.Parameters.AddWithValue("@Quantity", Convert.ToInt32(trackParts(i, 3))) 
       cmd.ExecuteNonQuery() 
      End If 
     Next 
     con.Close() 
    End Sub 
End Class 
相关问题