2014-02-25 4 views
0

오류 메시지는 다른 스레드에서도 사용할 수 있지만 제 경우에는 다릅니다. 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. 다음 select 문을 쿼리 할 때 사용합니다. 내부의 문제는 무엇입니까?Select 문에 VB.Net에서 오류가 발생했습니다.

Dim con As New MySqlConnection(ConString) 
      Dim sql As String 
      Dim idno As Integer 
      sql = "select client_id from car_rent where car_id = @carid" 
      cmd.Parameters.AddWithValue("@carid", carid.Text.Trim) 
      cmd = New MySqlCommand(sql, con) 
      idno = cmd.ExecuteScalar() 
      If (idno > 0) Then 
       MsgBox("The Car is already Rented!", MsgBoxStyle.Exclamation, "Car Rental System") 
       Return 
      End If 

답변

0

전환이 두 줄

cmd = New MySqlCommand(sql, con) 
cmd.Parameters.AddWithValue("@carid", carid.Text.Trim) 

또한이 명령을 실행하는 라인이 당신이 옵션 엄격한 오프 사용하고 있기 때문에 작동하는 것, 그리고 내가 엄격한 옵션으로 변경하는 것이 좋습니다의 순서 에. 단기적으로는 많은 문제를 해결해야하지만, 위의 명령 전달 된 매개 변수와 일치하는 기록을 찾을 수없는 경우는,

idno = CType(cmd.ExecuteScalar(), Integer) 

그러나 더 나은 코딩 관행

을 허용, ExecuteScalar는 아무 것도 반환하고 그래서 당신은 테스트 할 필요가 이 상황

Dim result = cmd.ExecuteScalar() 
if result IsNot Nothing Then 

    idno = CType(result, Integer) 

그리고, 물론, 연결이 너무

Dim sql = "select client_id from car_rent where car_id = @carid" 
Using con As New MySqlConnection(ConString) 
Using cmd = New MySqlCommand(sql, con) 
    con.Open() 

    cmd.Parameters.AddWithValue("@carid", carid.Text.Trim) 
    Dim result = cmd.ExecuteScalar() 
    if result IsNot Nothing Then 
     Dim idno = CType(result, Integer) 
     If (idno > 0) Then 
      MsgBox("The Car is already Rented!", MsgBoxStyle.Exclamation, "Car Rental System") 
      Return 
     End If 
    End If 
End Using 
End Using 

그럼 아마 충분히 모든 것을 요약 전에 열 수 있습니다 다른 목적을 위해 idno 변수가 필요하지 않으면 ExecuteScalar 결과에 대해 Nothing을 테스트하여 결정을 내립니다.

+0

나는 당신의 제안 강철 동일한 문제를 사용하여 시도했다. ** cmd.ExecuteScalar()에 오류가 있음 ** –

+0

이제 완벽하게 작동합니다. 감사! –

+0

하지만 ** IsNot Nothing **과이 코드 내부의 비밀은 무엇입니까? –

1

어디서나 연결을 볼 수 없습니다. 사용

con.open() 
+0

질문을 게시 한 후에 이미 열었습니다. –

관련 문제