2013-04-28 3 views
0

VB.Net에서 매개 변수화 된 sql 문을 ms 액세스 db (.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

+0

올바른 유형의 임시 변수에'trackParts (I, 0)'를 할당하고'AddWithValue' 호출에서 임시 변수를 사용하십시오. –

+0

테이블 정의를 게시하는 방법은 무엇입니까? 텍스트를 게시하기에는 너무 깁니다. 테이블의 PartNumber는 데이터 유형이 TEXT이고 ToString()을 String 데이터 유형이라고 가정합니다. 편집 : Pieter, 나는 이미 그것을 시도했다. 동일한 오류가 발생했습니다. – Josiah

답변

0

이 정말 대답 자체 아니지만, 그것은 비주얼 웹 개발자 2010 년 나는 당신의 For 루프의 내용을 만든 유일한 변경에 나를 위해 제대로 작동 정확한 코드는 I가 변경된 것을입니다 내 테스트 데이터 배열에는 행이 하나 밖에 없으므로 루프 종료 조건은 trackParts.GetUpperBound(0) - 1에서 trackParts.GetUpperBound(0)까지입니다.

테이블 : [ServiceParts]
IncidentNumber - 텍스트 (255)
PARTNUMBER - 텍스트 (255)
수량 - 숫자 (정수 (Long))
(. 아니 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 
관련 문제