1

以下のコードを実行しようとしています。以前は動作していましたが、2 つ目のデータリーダーを追加すると停止しました。誰が何が悪いのか教えてもらえますか?

Protected Sub btnSearchUser_Click(sender As Object, e As EventArgs) Handles btnSearchUser.Click

        Dim conn As New SqlConnection("Data Source=BRIAN-PC\SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True")
        Dim searchComm As String = "SELECT * FROM users WHERE username LIKE @username"
        Dim user_id_select As New Integer

        Dim searchSQL As New SqlCommand

        conn.Open()

        searchSQL = New SqlCommand(searchComm, conn)
        searchSQL.Parameters.AddWithValue("@username", txtUserSearch.Text)

        Dim datareader As SqlDataReader = searchSQL.ExecuteReader()

        While datareader.Read

            lstUsers.Items.Add(datareader.Item("username"))

        End While

        datareader.Close()
        conn.Close()


        Dim conn2 As New SqlConnection("Data Source=BRIAN-PC\SQLEXPRESS;Initial Catalog=master_db;Integrated Security=True")
        Dim selectComm As String = "SELECT user_id FROM users WHERE username=@username_selected"

        Dim selectSQL As New SqlCommand

        conn2.Open()


        selectSQL = New SqlCommand(selectComm, conn2)
        selectSQL.Parameters.AddWithValue("@username_selected", lstUsers.SelectedItem.Text.Trim)

        Dim datareader2 As SqlDataReader = selectSQL.ExecuteReader()

        While datareader2.Read

            If datareader2.HasRows Then

                user_id_select = datareader2("user_id")

                lblUserSelected.Text = "Selected: " + lstUsers.SelectedItem.Text

            ElseIf datareader2.HasRows = False Then

                lblInvalidUsername.Visible = True
                datareader2.Close()


            End If

        End While


        conn2.Close()



    End Sub

ここに画像の説明を入力

やあ、

lblUserSelected.Text = "Selected: " + lstUsers.SelectedItem.Textユーザー名を入力して検索をクリックするたびにNullReference例外が発生しtxtUserSearchます.以前は機能していました..何が起こったのかわかりません..

誰が何が悪いのか教えてもらえますか?

4

1 に答える 1

0

私はあなたがNullReferenceExceptionこの行を取得していると仮定します:

selectSQL.Parameters.AddWithValue("@username_selected", lstUsers.SelectedItem.Text.Trim)

SelectedItem最近入力した の を指定していないためですListBox。最初の項目を選択するには、次のコードを使用できます。

While datareader.Read
    lstUsers.Items.Add(datareader.Item("username"))
End While
If lstUsers.Items.Count <> 0 Then lstUsers.SelectedIndex = 0

ListBoxまた、データベースにユーザー名がなく、空で選択項目がない場合も処理していません。

于 2013-04-08T13:33:58.890 に答える