0

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

问题在于@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

提前感谢您的帮助,如果需要更多信息,请告诉我,我会发布。当我想到要尝试的新事物时,我也会用我尝试过的新事物来更新它。

4

1 回答 1

0

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

表:[ServiceParts]
IncidentNumber - Text(255)
PartNumber - Text(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
于 2013-04-29T15:16:01.647 回答