条件表达式中的数据类型不匹配。

时间:2013-04-28 22:16:04

标签: sql vb.net ms-access

当我尝试将VB.Net中的参数化sql语句运行到ms-access db(.accdb)时,我不断收到data type mismatch in criteria expression错误消息。

问题在于@PartNumber,我知道的很多,因为我直接硬编码以从数组中获取值,并且它有效。我只是不知道如何解决它。

表中的

PartNumber是一个TEXT字段,它是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

预先感谢您提供任何帮助,如果还有其他信息,请告诉我,我会发布。当我想到要尝试的新事物时,我也会用我尝试过的新东西来更新它。

1 个答案:

答案 0 :(得分:0)

虽然这不是本身的答案,但在Visual Web Developer 2010中,我可以正确使用完全代码。我对此做出的唯一更改For循环的内容是我将循环结束条件从trackParts.GetUpperBound(0) - 1更改为trackParts.GetUpperBound(0),因为我的测试数据数组只有一行。

表:[ServiceParts]
IncidentNumber - 文本(255)
PartNumber - 文本(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