0

data type mismatch in criteria expressionVB.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) - 1ことtrackParts.GetUpperBound(0)です。のテスト データには 1 行しかありませんでした。

表: [ServiceParts]
IncidentNumber - Text(255)
PartNumber - Text(255)
Quantity - Number(Long Integer)
(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 に答える