【问题标题】:How to get values in a column of a DataTable?如何获取 DataTable 的列中的值?
【发布时间】:2016-06-04 23:02:31
【问题描述】:

我的 Asp.NET 项目中有登录页面,我想要的基本上是获取返回 i_idficha、contrasena 和 s_nombre 的查询列的行。名为 s_nombre 的列将保存在变量 SESSION 中。这是我所拥有的:

Protected Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click

    Threading.Thread.Sleep(2000)
    Dim cmd As New SqlCommand("SELECT dbo.USUARIO.i_idficha, dbo.CONTRASENA_USUARIO.s_contrasena, dbo.USUARIO.s_nombre FROM dbo.USUARIO INNER JOIN dbo.CONTRASENA_USUARIO ON dbo.USUARIO.i_idficha = dbo.CONTRASENA_USUARIO.i_ficha WHERE i_idficha = @ficha AND s_contrasena = @pass", cn)
    cmd.CommandType = CommandType.Text
    cmd.Parameters.AddWithValue("@ficha", SqlDbType.Int).Value = txtUser.Text
    cmd.Parameters.AddWithValue("@pass", SqlDbType.VarChar).Value = txtPass.Text
    cn.Open()
    Dim adp As New SqlDataAdapter(cmd)
    Dim table As New DataTable()

    adp.Fill(table)
    Dim nombre = table.Rows("s_nombre").ToString()
    If table.Rows.Count <> 0 Then
        If CheckBox1.Checked Then
            Response.Cookies("FICHA").Value = txtUser.Text
            Response.Cookies("CONTRASENA").Value = txtPass.Text

            Response.Cookies("FICHA").Expires = DateTime.Now.AddDays(10)
            Response.Cookies("CONTRASENA").Expires = DateTime.Now.AddDays(10)
        Else
            Response.Cookies("FICHA").Expires = DateTime.Now.AddDays(-1)
            Response.Cookies("CONTRASENA").Expires = DateTime.Now.AddDays(-1)
        End If

        Session("NOMBRE") = nombre
        Response.Redirect("~/Default.aspx")
    Else
        Panel1.Visible = True
    End If

End Sub

我在这里所做的是声明一个名为 nombre 的变量,它等于

table.Rows("s_nombre").ToString()

并将其保存在变量 SESSION("NOMBRE") 中但不起作用。

这是错误:

输入的字符串格式不正确

这是我的 Default.aspx 代码隐藏:

 Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Session("FICHA") <> Nothing Then
        Label1.Text = "Bienvendio <i aria-hidden='true' class='glyphicon glyphicon-user'></i> " & Session("NOMBRE").ToString()
    Else
        Response.Redirect("~/Login.aspx")
    End If
End Sub

Protected Sub linkBtnLogOut_Click(sender As Object, e As EventArgs) Handles linkBtnLogOut.Click
    Session("FICHA") = Nothing
    Response.Redirect("~/Login.aspx")
End Sub

如何保存我的查询中名为 s_nombre 的列?

【问题讨论】:

    标签: asp.net vb.net login datatable


    【解决方案1】:

    我很确定 table.Rows(x) 需要行索引,而不是列字符串。所以应该是:

    Dim nombre = table.Rows(0)("s_nombre").ToString()
    

    【讨论】:

    • 您好,发生另一个错误:>位置 0 处没有行
    • 这意味着 DataTable 是空的。将那行代码移到“If table.Rows.Count 0 Then” if 语句中以避免此错误。然后检查您的 SELECT 语句以确保它正在返回数据。
    • 再次嗨,我在我的 IF 语句中移动了该行,但程序什么也不做,不重定向到 Default.aspx,我将编辑我的问题,为 Default.aspx 添加我的代码隐藏。 SELECT 查询返回数据。
    【解决方案2】:

    我想发布我的答案,我解决了,因为我忘了写

    SESSION("FICHA") = txtUser.Text
    

    然后我的登录代码将:

    Protected Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
               Threading.Thread.Sleep(2000)
        Dim cmd As New SqlCommand("SELECT dbo.USUARIO.i_idficha, dbo.CONTRASENA_USUARIO.s_contrasena, dbo.USUARIO.s_nombre FROM dbo.USUARIO INNER JOIN dbo.CONTRASENA_USUARIO ON dbo.USUARIO.i_idficha = dbo.CONTRASENA_USUARIO.i_ficha WHERE i_idficha = @ficha AND s_contrasena = @pass", cn)
        cmd.CommandType = CommandType.Text
        cmd.Parameters.AddWithValue("@ficha", SqlDbType.Int).Value = txtUser.Text
        cmd.Parameters.AddWithValue("@pass", SqlDbType.VarChar).Value = txtPass.Text
        cn.Open()
        Dim adp As New SqlDataAdapter(cmd)
        Dim table As New DataTable()
        adp.Fill(table)
        If table.Rows.Count <> 0 Then
    
            If CheckBox1.Checked Then
                Response.Cookies("FICHA").Value = txtUser.Text
                Response.Cookies("CONTRASENA").Value = txtPass.Text
    
                Response.Cookies("FICHA").Expires = DateTime.Now.AddDays(10)
                Response.Cookies("CONTRASENA").Expires = DateTime.Now.AddDays(10)
            Else
                Response.Cookies("FICHA").Expires = DateTime.Now.AddDays(-1)
                Response.Cookies("CONTRASENA").Expires = DateTime.Now.AddDays(-1)
            End If
            Dim nombre = table.Rows(0)(2).ToString()
            Session("FICHA") = txtUser.Text
            Session("NOMBRE") = nombre
            Response.Redirect("~/Default.aspx")
        Else
            Panel1.Visible = True
        End If
    
    End Sub
    

    谢谢@Aki

    【讨论】:

      猜你喜欢
      • 2014-07-07
      • 2011-11-20
      • 2021-10-16
      • 1970-01-01
      • 2016-11-20
      • 2011-06-07
      • 2015-03-20
      • 1970-01-01
      • 2019-06-13
      相关资源
      最近更新 更多