2012-06-18 2 views
2

왜이 오류가 발생합니까? "OledbException이 처리되지 않았습니다." "조건 식에서 데이터 형식이 일치하지 않습니다.""조건 식의 데이터 형식 불일치"에서 무엇을해야합니까?

내가 문자열 데이터 형식을 조회하고,하지만 난 정수 데이터 형식을 조회하고 때 아무 문제가 없다, 난 항상이 문제를 얻고있다 ..

나는 2007

여기에 Microsoft Access를 사용하고 있습니다 내 소스 코드 :

Public Function searchMemberId(ByVal userId As String) As DataSet 
    sqlStr = "Select Member_ID From tblMemberInfo Where Member_ID = '" & _ 
     Val(userId) & "'" 
    ds.Clear() 
    da = New OleDbDataAdapter(sqlStr, con.ConnectionString) 
    da.Fill(ds, "john") 

    Return ds 
End Function 

MEMBER_ID의 데이터 유형은 일련 번호이다가, 오류가 항상 da.Fill를 가리키는되었다 (DS, "존")

"DS"는 것입니다 당신이 숫자 유형을 조회 할 경우 문자열 유형을 조회 할 경우 데이터 집합

답변

1

는 따옴표

SELECT Member_ID 
FROM tblMemberInfo 
WHERE Member_ID = 'john' 

UPDATE를 사용합니까, 따옴표

SELECT Member_ID 
FROM tblMemberInfo 
WHERE Member_ID = 17 

를 사용하지 않는

이 경우 Val 함수가 도움이되지 않습니다. ID가 당신은 SQL 문자열

ID = "John's record" 
sqlStr = "SELECT ... WHERE Member_ID = '" & ID.Replace("'", "''") & "'" 
' ==> "SELECT ... WHERE Member_ID = 'John''s record'" 

이 또한 방지하는 데 도움이 SQL injections (위키 백과)에 따옴표 탈출해야한다 따옴표를 포함 할 수있는 문자열이라면 간단히

sqlStr = "SELECT ... WHERE Member_ID = " & userId 

물품. 그러나보다 전문적인 방법은 매개 변수를 사용하는 것입니다. MSDN에 스티브의 대답과 DataAdapter Parameters (ADO.NET) (특히 "은 OleDb 매개 변수 자리 표시 자"와 "은 OleDb 예"절을 참조하십시오.

+0

감사하는 선생님, 그것은 작동 , 나는 그것을 잊었다. – user188228

1

을 당신은 매개 변수를 사용해야하며, 문제의이 유형은 발생하지 않습니다.

sqlStr = "Select Member_ID From tblMemberInfo Where Member_ID = ?" 
ds.Clear() 
da = New OleDbDataAdapter(sqlStr, con.ConnectionString) 
da.SelectCommand.Parameters.AddWithValue("@id", Convert.ToInt32(userID)) 
da.Fill(ds, "john") 
Return ds 
관련 문제