2014-05-23 180 views
0

下面是從數據庫中檢索值的代碼,但我的問題是它會拋出一個異常,指出「InvalidCastException未處理,指定的轉換無效」。我現在困惑什麼出了問題,代碼和表格如下所示。指定的轉換無效

下面是代碼:

Public connstring As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" & Application.StartupPath & 
       "\TestData.accdb; Persist Security info = false" 
Public Conn As New OleDbConnection 

Private Sub TestForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Loard 
    Conn.ConnectionString = connstring 
    Conn.Open() 

    LoadValue() 

End Sub 

Private Sub LoadValue() 
    Dim i As Integer  
    Dim cmd As OleDbCommand = New OleDbCommand 

    With cmd 
     .CommandText = "SELECT MAX(Guard_ID) FROM Guard" 
     .CommandType = CommandType.Text 
     .Connection = Conn 
     .ExecuteNonQuery() 

     Dim reader As OleDbDataReader = cmd.ExecuteReader 


     If reader.Read Then 

      TextBox1.Text = reader.GetString(0) 
     i = TextBox1.Text + 1 
     TextBox1.Text = i 

      reader.Close() 
     End If 
    End With 

End Sub 

表參考:

enter image description here

異常錯誤:

enter image description here

我現在真的很困惑爲什麼代碼不工作,任何hel p和建議將很樂意接受。提前致謝。

+0

請問'Conn'對象存在嗎?錯誤會引發什麼? – hammus

+0

我已完成代碼,包括conn對象。錯誤在行上引發「TextBox1.Text = reader.GetString(0)」 –

+0

reader.GetFieldType(0)的結果是什麼?這會告訴你返回的類型。如果Guard表沒有行,則可能是DbNull。 – shf301

回答

3

試試這個,

Private Sub LoadValue() 
    Dim i As Integer 
    Dim cmd As OleDbCommand = New OleDbCommand 

    With cmd 
     .CommandText = "SELECT MAX(Guard_ID) FROM Guard" 
     .CommandType = CommandType.Text 
     .Connection = Conn 
     .ExecuteNonQuery() 

     Dim reader As OleDbDataReader = cmd.ExecuteReader 


     If reader.Read Then 

      Dim tmpVal As Object = reader.Item(0) 
      TextBox1.Text = IIf(IsDBNull(tmpVal), "0", tmpVal.ToString()) 

      i = CInt(TextBox1.Text) + 1 
      TextBox1.Text = i.ToString() 

      reader.Close() 
     End If 
    End With 

End Sub 
+0

非常感謝這個作品。 –