从数据库获取数据其中UserID等于asp:label中的值

时间:2014-02-05 18:45:41

标签: c# asp.net sql

您好,感谢您的阅读。

我有一个表单,用户可以将数据插入到我的数据库中,同时,用户唯一ID存储在同一个表中。

以下是我将Unique存储在标签中的代码:

MembershipUser user = Membership.GetUser();
string id = user.ProviderUserKey.ToString();
lblID.Text = id.ToString();

这就是我的数据库的样子/ ID,姓名,电子邮件,主题,消息,用户ID /

这是我的数据库代码:

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);
    conn.Open();

    string Name = txtName.Text;
    string Email = txtEmail.Text;
    string Subject = ddlSubject.SelectedValue;
    string Message = txtMessage.Text;
    string UniqueID = lblID.Text;

    string query = "INSERT INTO Ticket(Name, Email, Subject, Message, UserID)" + "Values('" + Name + "', '" + Email + "', '" + Subject + "', '" + Message + "', '" + UniqueID + "')";
    using (SqlCommand com = new SqlCommand(query, conn))
    {
        com.ExecuteNonQuery();
    }

我遇到的问题是从UserID = lblID.text的数据库中获取数据。

正如您在下面的代码中看到的,我在查找要加载数据的内容时遇到问题,其中UserID = lblID.text。

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);
                conn.Open();

                using (var GetName = new SqlCommand("SELECT Name FROM Ticket WHERE UserID=''", conn))
                using (SqlDataReader dr = GetName.ExecuteReader())
                {
                    if (dr.Read())
                    {
                        lblGetData.Text = dr.GetString(dr.GetOrdinal("Name"));
                    }
                }

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:3)

更改此行。

using (var GetName = new SqlCommand("SELECT Name FROM Ticket WHERE UserID=''", conn))

using (var GetName = new SqlCommand("SELECT Name FROM Ticket WHERE UserID='" + lblID.Text + "'", conn))

此查询很容易受到SQL注入攻击..如果您不确定该值来自何处,则应使用sql参数来最小化sql注入的风险。

答案 1 :(得分:1)

您需要将lblID.Text传递给SQL查询。使用此参数化查询可以避免SQL Injection

using (var GetName = new SqlCommand("SELECT Name FROM Ticket WHERE UserID = @UserID", conn))
{
    GetName.Parameters.AddWithValue("@UserID", lblID.Text);
    using (SqlDataReader dr = GetName.ExecuteReader())
    {
        if (dr.Read())
        {
            lblGetData.Text = dr.GetString(dr.GetOrdinal("Name"));
        }
    }
}

答案 2 :(得分:1)

using (var GetName = new SqlCommand("SELECT Name FROM Ticket WHERE UserID='" + lblID.Text + "'", conn))

使用这个答案,我希望它有所帮助。