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