0

これは私のデータベーステーブルです

ID名

1 abc
2 xyz
it i enter 1 then each value "abc" display in different text box???

Private Sub butsea_Click(sender As Object, e As EventArgs) Handles butsea.Click

    Dim dset As New DataSet
    Dim da As SqlDataAdapter
    Dim myCmd As New SqlCommand

    Try
   myConn.ConnectionString = "Data Source=THEONE\PARTH;Initial Catalog=testdatabase;Integrated Security=True;"
        myConn.Open()

        Dim avalue As String = (InputBox("Input Student Id", "Search Student")).ToString
        txt_id.Text = avalue
        da = New SqlDataAdapter("SELECT * FROM studentdetails where student_id= '" & txt_id.Text & "", myConn)
        If dset.Tables(0).Rows.Count > 0 Then
           'what should i write here
        Else
            MsgBox("No Record Found")
        End If
       
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        myConn.Close()
    End Try

End Sub
4

2 に答える 2

3

単一の値だけをフェッチする必要がある場合 - DataAdapter と DataSet を使用するのはやり過ぎです。メソッドを使用SqlCommand.ExecuteScalarし、「SELECT * ...」の代わりにクエリで「SELECT YOURFIELD ...」を実行します。

この方法では、フープを介してデータセットを構築したり、行数を確認したりする必要はなく、代わりに Nothing の戻り値を確認するだけです。

更新ExecuteScalar を使用するように変更されたコードは次のとおりです。

Private Sub butsea_Click(sender As Object, e As EventArgs)  Handles butsea.Click

        Dim myCmd As SqlCommand
        Dim myConn As New SqlConnection
        Dim oResult As Object

        Try
            myConn.ConnectionString = "Data Source=THEONE\PARTH;Initial Catalog=testdatabase;Integrated Security=True;"
            myConn.Open()

            Dim avalue As String = (InputBox("Input Student Id", "Search Student")).ToString
            txt_id.Text = avalue

            myCmd = New SqlCommand("SELECT student_name FROM studentdetails where student_id= '" & txt_id.Text & "'", myConn)
            oResult = myCmd.ExecuteScalar()

            If oResult IsNot Nothing Then
                txt_name.text = oResult.ToString
            Else
                MsgBox("No Record Found")
            End If

        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            myConn.Close()
        End Try
End Sub

このコードは、表示する必要があるデータベース フィールドが呼び出されstudent_name、呼び出された TextBoxtxt_nameをフォームに追加したことを前提としています。

于 2013-08-24T18:08:23.983 に答える
1

表示するすべてのフィールドに他のテキスト ボックスを追加する必要があります。
(たとえば、txtStudentName という名前のテキストボックスを名前に使用でき、テーブルに存在する他のフィールドにも同様に使用できますstudentdetails)。

データベースにクエリを実行する正しい方法 (SqlDataReader を使用するなどの他の方法を除外する) は、次のようにする必要があります。

  Dim dset As New DataSet
  Dim da As SqlDataAdapter

Try
    myConn.ConnectionString = "Data Source=THEONE\PARTH;Initial Catalog=testdatabase;Integrated Security=True;"
    myConn.Open()
    Dim avalue As String = (InputBox("Input Student Id", "Search Student")).ToString
    txt_id.Text = avalue

    ' prepare the adapter with a commandtext. Do not use string concatenation from user input'
    da = New SqlDataAdapter("SELECT * FROM studentdetails where student_id=@id", myConn)
    da.SelectCommand.Parameters.AddWithValue("@id", txt_id.Text)

    ' Fill the dataset'
    da.Fill(dset)
    If dset.Tables(0).Rows.Count > 0 Then
        ' Supposing you have a field for the studentname in the first column of the returned
        ' datatable rows(rowindex)(columnindex)
        txtStudentName.Txt = dset.Tables(0).Rows(0)(0).ToString()
        .....
        ' Set the text property of other textboxes for other fields to show'
    Else
        MsgBox("No Record Found")
    End If
于 2013-08-24T17:58:28.073 に答える