2013-04-28 58 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 
相關問題