【问题标题】:Issues with Selecting and Displaying Data using Data Reader使用数据阅读器选择和显示数据的问题
【发布时间】:2019-06-09 23:54:13
【问题描述】:

我一直在练习和使用 VB.NET 和 ASP.NET 中的代码。我有一个程序,其中我有一个 GridView 名称 gvPerson。在 GridView 中,有一个人员列表及其详细信息,例如姓名、徽章编号、雇用日期等。在 GridView 顶部,我有链接按钮控件:添加人员、发布人员设备、编辑人员和删除人员.例如,当我从网格视图中选择某人然后单击发布人员设备时,所选人员的姓名和 ID 将显示在出现的模式表单上。我现在的问题是当我运行我的代码时,我收到一个错误,指出我的 DataAdapter 中没有任何内容。对此有点陌生,我相信我的逻辑有点不对劲,我可能错过了一些东西。这是我所拥有的:

Dim strSelectedPersonID As String
Dim strSelectedPersonName As String
Dim strSelectPosition As String
Dim strBadgeNo As String

If e.CommandName = "Select" Then
    idx = Convert.ToInt32(e.CommandArgument)

    Dim row As GridViewRow = gvPerson.Rows(idx)

    strSelectedPersonID = row.Cells(1).Text

    Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString2").ToString())
        conn.Open()
        Dim dsPerson As New DataSet()
        Dim dr As SqlDataReader
        Dim da As SqlDataAdapter

        Dim strSelectCmd As String = "SELECT * FROM Personnel WHERE SempID = @SempID "
        Dim cmd As New SqlCommand(strSelectCmd, conn)

        cmd.Parameters.AddWithValue("@SempID", strSelectedPersonID)
        cmd.Connection = conn
        da.SelectCommand = cmd
        dr = cmd.ExecuteReader()

        If dr.HasRows Then

            While (dr.Read())
                strSelectPosition = dr(3).ToString
                strBadgeNo = dr(4).ToString
            End While

        End If


        strSelectedPersonName = cmd.ExecuteScalar()
        tbEditPosition.Text = strSelectPosition
        tbEditBadge.Text = strBadgeNo
        conn.Close()

    End Using

End If

tbSecID.Text = strSelectedPersonID
tbSecName.Text = strSelectedPersonName

编辑: 这是我使用 DataAdapter 的代码:

Try
        strconn.Open()

        Dim sQuery As String = "SELECT * FROM tblUsers WHERE Username = @Username AND Password = @Password AND Status= @Status"

        Dim datareader As SqlDataReader
        Dim adapter As New SqlDataAdapter
        Dim parameter As New SqlParameter
        Dim command As SqlCommand = New SqlCommand(sQuery, strconn)

        command.Parameters.AddWithValue("@Username", txtUsername.Text)
        command.Parameters.AddWithValue("@Password", txtPassword.Text)
        command.Parameters.AddWithValue("@Status", 1)

        command.Connection = strconn
        adapter.SelectCommand = command
        datareader = command.ExecuteReader()

        If datareader.HasRows Then

            While (datareader.Read())
                strUserID = datareader(0).ToString
                strUserFname = datareader(3).ToString
                strUserLname = datareader(4).ToString
            End While

            xPersonID = strUserID
            xPersonName = strUserFname + " " + strUserLname

            'MsgBox("Login Successfull!     ", vbInformation, vbOKOnly)

            Response.Redirect("http://localhost:00000/index.aspx")
            datareader.Close()
            LoginOk = True

        Else
            Response.Write("<SCRIPT LANGUAGE=""JavaScript"">  alert('Invalid Username or Password!');</script>")
            ' MsgBox("Invalid Username or Password!    ", vbInformation, vbOKOnly)
            txtUsername.Text = ""
            txtPassword.Text = ""
            txtUsername.Focus()
        End If
        datareader.Close()

    Catch ex As Exception
        'MsgBox(ex.Message)
    End Try

【问题讨论】:

  • 确实如此,您的代码从不向 DataAdapter 添加任何数据(代码中的da)。通常你会期望一个Fill 命令或类似的命令来填充它的查询结果。也许检查一些教程。
  • 您发布的代码与您的描述不符。 da 从未使用“new”初始化,因此无法使用。如果这只是缺少一行,那么您声称的错误会发生在其他地方,因为 da 永远不会被填充。如果您的代码中的其他地方有 da,那么发布的 sn-p 中就不是这个。
  • @LarsTech 问题是:我有使用它的代码,在我的实验中,我想尝试不同的代码,看看我是否能实现我想要完成的目标。我可以使用我在其他形式中使用的“da”添加代码。
  • DataReaders 和 DataAdapters 是两个不同的东西。您的阅读器仅通过集合向前迭代,而适配器将填充 DataSet 或 DataTable 供您自行决定处理数据。

标签: asp.net sql-server vb.net


【解决方案1】:

感谢大家的意见。我使用 SqlDataReader 浏览表并选择用户的详细信息。现在一切似乎都运行良好。这是我想出的:

    Dim strSelectedPersonID As String
    Dim strSelectedPersonName As String
    Dim strSelectPosition As String
    Dim strBadgeNo As String
    Dim strDateHired As String
    Dim strContactNo As String
    Dim strEmail As String
    Dim strEmerContactNo As String
    Dim strContactPerson As String
    Dim strRemarks As String

    If e.CommandName = "Select" Then
        idx = Convert.ToInt32(e.CommandArgument)

        Dim row As GridViewRow = gvPerson.Rows(idx)

        strSelectedPersonID = row.Cells(1).Text

        Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString2").ToString())
            conn.Open()
            Dim dsPerson As New DataSet()
            Dim dr As SqlDataReader

            Dim strSelectCmd As String = "SELECT * FROM Personnel WHERE SempID = @SempID "
            Dim cmd As New SqlCommand(strSelectCmd, conn)

            cmd.Parameters.AddWithValue("@SempID", strSelectedPersonID)
            cmd.Connection = conn
            dr = cmd.ExecuteReader()

            If dr.HasRows Then

                While (dr.Read())
                    strSelectedPersonName = dr(1).ToString
                    strSelectPosition = dr(2).ToString
                    strBadgeNo = dr(3).ToString
                    strDateHired = dr(4).ToString
                    strContactNo = dr(5).ToString
                    strEmail = dr(6).ToString
                    strEmerContactNo = dr(7).ToString
                    strContactPerson = dr(8).ToString
                    strRemarks = dr(10).ToString
                End While

            End If


            'strSelectedPersonName = cmd.ExecuteScalar()
            tbSecName.Text = strSelectedPersonName
            tbEditPosition.Text = strSelectPosition
            tbEditBadge.Text = strBadgeNo
            tbEditHireDate.Text = strDateHired
            tbEditContactNo.Text = strContactNo
            tbEditEmail.Text = strEmail
            tbEmerNo.Text = strEmerContactNo
            tbEditContactPerson.Text = strContactPerson
            tbEditRemarks.Text = strRemarks
            conn.Close()

        End Using

    End If

    tbEditName.Text = strSelectedPersonName
    tbSecID.Text = strSelectedPersonID
    tbSecName.Text = strSelectedPersonName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多