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 

テーブル参照:

ここに画像の説明を入力

例外エラー:

ここに画像の説明を入力

コードが機能しない理由について、私は本当に混乱しています。どんな助けやアドバイスも喜んで受け入れます。前もって感謝します。

4

1 に答える 1

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
于 2014-05-23T05:42:57.780 に答える