0

さて、私はVB.NETシステムを構築していますが、コードの一部でSQL例外をキャッチするのに問題があります。つまり、SELECT sqlクエリを使用して特定のレコードを取得しており、MSAccessデータベースにレコードが存在するかどうかを確認して、0行を取得しないようにします。0行は、TextFieldへの印刷中に例外が発生します。以下は私が取り組んでいるサンプルコードです:

    If txSearch.Text = "" Then
        MsgBox("Please type the user id or use the barcode reader to scan",     MsgBoxStyle.OkOnly, "Search Field Empty")
    End If

    'ElseIf txSearch.Text != "" Then
    If txSearch.Text <> "" Then
        Dim con As New OleDb.OleDbConnection
        Dim dbProvider As String
        Dim dbSource As String
        Dim ds As New DataSet
        Dim dt As New DataSet
        Dim da As OleDb.OleDbDataAdapter
        Dim de As OleDb.OleDbDataAdapter
        Dim sql As String
        Dim sql1 As String
        Dim temp_num As Integer
        Dim cmd As New OleDb.OleDbCommand

        dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"
        dbSource = "Data Source = new.mdb"

        con.ConnectionString = dbProvider & dbSource

        con.Open()

        Dim search As String
        search = txSearch.Text
        MessageBox.Show("You are going to search for " + search + ". Click OK to continue.")

        sql = "SELECT * FROM Student_Details WHERE Admin_No = '" & txSearch.Text & "'"

        sql1 = "SELECT * FROM Laptop_Details WHERE Admin_No = '" & txSearch.Text & "'"

        da = New OleDb.OleDbDataAdapter(sql, con)

        de = New OleDb.OleDbDataAdapter(sql1, con)

        'Dim check As Integer = sql.
        'If check > 0 Then

        'da.SelectCommand = cmd
        ds = New DataSet("Student_Details")
        da.Fill(ds, "Student_Details")
        dt = New DataSet("Laptop_Details")
        de.Fill(dt, "Laptop_Details")
        'con.Close()

        'If sql <> "" And sql1 <> "" Then
        'If ds.Equals(1) And ds.Equals(1) Then
        txAdminNO.Text = ds.Tables("Student_Details").Rows(0).Item(0)
        txName.Text = ds.Tables("Student_Details").Rows(0).Item(1)
        txProgramme.Text = ds.Tables("Student_Details").Rows(0).Item(2)
        cmbSStatus.SelectedText = ds.Tables("Student_Details").Rows(0).Item(3)
        txSerial.Text = dt.Tables("Laptop_Details").Rows(0).Item(1)
        txModel.Text = dt.Tables("Laptop_Details").Rows(0).Item(2)

        Dim com As New OleDb.OleDbCommand(sql, con)
        Dim com1 As New OleDb.OleDbCommand(sql1, con)

        Try

            temp_num = com.ExecuteNonQuery
            temp_num = com1.ExecuteNonQuery

        Catch ex As IndexOutOfRangeException
            Trace.WriteLine(ex.ToString)

        End Try

        con.Close()
        'End If
        'End If
    End If
4

2 に答える 2

0

次のようなものを試してください。

 if ds.Tables("Student_Details").Rows.Count > 0  
    txAdminNO.Text = ds.Tables("Student_Details").Rows(0).Item(0)
    txName.Text = ds.Tables("Student_Details").Rows(0).Item(1)
    txProgramme.Text = ds.Tables("Student_Details").Rows(0).Item(2)
    cmbSStatus.SelectedText = ds.Tables("Student_Details").Rows(0).Item(3)

 End if

 if ds.Tables("Laptop_Details").Rows.Count > 0
    txSerial.Text = dt.Tables("Laptop_Details").Rows(0).Item(1)
    txModel.Text = dt.Tables("Laptop_Details").Rows(0).Item(2)
 End if

あなたのコメントを手伝うために、私はそれをそのようにします:

 if ds.Tables("Student_Details").Rows.Count > 0 And ds.Tables("Laptop_Details").Rows.Count > 0
    txAdminNO.Text = ds.Tables("Student_Details").Rows(0).Item(0)
    txName.Text = ds.Tables("Student_Details").Rows(0).Item(1)
    txProgramme.Text = ds.Tables("Student_Details").Rows(0).Item(2)
    cmbSStatus.SelectedText = ds.Tables("Student_Details").Rows(0).Item(3)
    txSerial.Text = dt.Tables("Laptop_Details").Rows(0).Item(1)
    txModel.Text = dt.Tables("Laptop_Details").Rows(0).Item(2)
 else
  MsgBox("The user with id "+txSearch.Text+" does not exist") 
 end if
于 2012-10-25T11:15:24.523 に答える
0

try-catchステートメントを使用してみてください。


     クエリステートメントについては、ここでコードを 試してください。
exを例外としてキャッチ
    MsgBox(ex.Message)
End Try

于 2012-10-25T10:42:59.157 に答える