【问题标题】:How to display specific column data to a label from a database using a session?如何使用会话将特定列数据从数据库显示到标签?
【发布时间】:2013-07-03 22:57:43
【问题描述】:

我有一个 SQL Server 数据库,其中有一个名为 student 的表,它的列是:

  • std_id
  • 用户名
  • 密码
  • 年龄
  • 地址

该场景是用户已经登录并且他/她的username 保存在会话中,而他正在导航标签应该在标签中显示登录用户的年龄。

我不知道怎么做,很多例子展示了如何在不使用WHERE 子句或不使用会话的情况下将数据从数据库放入标签。

这是我使用的代码,在应该显示年龄的页面上不起作用。

    Dim con As String = ConfigurationManager.ConnectionStrings("con").ConnectionString
    Dim mycon As New SqlConnection(con)
    Dim agequery As String

    mycon.Open()

    agequery = "select age from student where username='" + Session("user")
    Dim com As New SqlCommand(agequery, mycon)
    lbl_agecurrent.Text = CStr(com.ExecuteScalar)

    mycon.Close()

【问题讨论】:

  • 只是一个小问题,为什么数据库存储的是人的年龄而不是他们的出生日期?
  • 最好的方法是,当您在登录时提取登录用户的数据时,还获取该用户的年龄并在会话变量中添加,因此,每次您不需要调用 db年龄。

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


【解决方案1】:

我不确定这是否重要,但我通常在 Session 变量周围使用方括号。此外,您忘记使用撇号来关闭您的 agequery 语句。因此,当 SQL 语句执行时,它找不到匹配的用户名,因此会向您的标签返回一个空值,这意味着您的用户不会看到任何内容。

如果我正确理解您的规格,我会写如下。

string ageQuery = "SELECT age FROM student WHERE username='" + Session["user"] + "'"
string connString = ConfigurationManager.ConnectionStrings("con").ConnectionString;

using (SqlConnection sqlConnection = new SqlConnection(connString))
using (SqlCommand sqlCommand = new SqlCommand(ageQuery, sqlConnection))
{
    sqlConnection.Open();
    lbl_agecurrent.Text = (com.ExecuteScalar).ToString();
}

如果您想了解更多信息,请查看http://www.dotnetperls.com/sqlconnection

【讨论】:

  • 请注意,如果用户名是用户可以控制的用户名,则此处的查询很容易受到 SQL 注入攻击。具体和相关的是,这个:xkcd.com/327
  • @AdrianWragg 哈哈,摸摸。我喜欢 xkcd。
  • 为此 - 当然,还有一个有用的答案 - 投赞成票!
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2014-09-24
  • 1970-01-01
  • 2021-12-23
相关资源
最近更新 更多