0

我想在 Visual Studio 2010(使用 Visual C#)上创建一个注册和登录表单。
我创建了基于服务的数据库和一张表。我可以将数据插入表中(在注册表中),但我不知道如何登录用户。

我有一个非常简单的登录表单(只有用户名和密码字段)和一个“登录”按钮。我真的不知道如何检查密码和用户名(存在于我的数据库中)是否匹配。这是我到目前为止所拥有的:

private void button1_Click(object sender, EventArgs e)  
    {  
        if (textBox1.Text != "" & textBox2.Text != "")  
        {  
            cn.Open();  // cn is the Sqlconnection
            cmd.Parameters.AddWithValue("@Username", textBox1.Text);  // cmd is SqlCommand 
            cmd.Parameters.AddWithValue("@Password", textBox2.Text);  
            if (cmd.CommandText == "SELECT * FROM Table1 WHERE username = @Username AND password = @Password")  
            {  
                MessageBox.Show("Loggen In!");  
                this.Close();  
            }  
            cn.Close();  
        }  
    } 
4

2 回答 2

4

您需要执行查询才能知道信息是否存在于数据库中

 if (textBox1.Text != "" & textBox2.Text != "")  
   {  
        string queryText = @"SELECT Count(*) FROM Table1 
                             WHERE username = @Username AND password = @Password";
        using(SqlConnection cn = new SqlConnection("your_connection_string"))
        using(SqlCommand cmd = new SqlCommand(queryText, cn))
        {
            cn.Open();  
            cmd.Parameters.AddWithValue("@Username", textBox1.Text); 
            cmd.Parameters.AddWithValue("@Password", textBox2.Text);  
            int result = (int)cmd.ExecuteScalar();
            if (result > 0)  
                MessageBox.Show("Loggen In!");  
            else
                MessageBox.Show("User Not Found!");  
        }
    }  

我还更改了您的代码中的某些内容。

  • 更改了查询文本以仅返回具有特定用户名和帐户的用户计数,并且能够使用ExecuteScalar
  • 将 SqlConnection 和 SqlCommand 的创建包含在using 语句中,以确保在操作结束时释放这些对象

我还建议更改存储密码的方式。
在密码字段中存储哈希而不是明文密码。然后将相同的哈希传递给数据库,并将其与数据库字段的内容进行比较。
这样,密码只有您的用户知道,而不是您或任何查看数据库表的路人知道

于 2013-05-17T21:35:22.187 回答
0
SqlConnection con = new SqlConnection("connection_string");
SqlCommand cmd = new SqlCommand("select Count(*) from [dbo].[Table] where uname=@uname and password=@password");
cmd.Connection = con;
con.Open();
cmd.Parameters.AddWithValue("@uname", uname.Text);
cmd.Parameters.AddWithValue("@password", password.Text);
int Result=(int)cmd.ExecuteScalar();
if (Result > 0)
 {
Response.Redirect("welcome.aspx");
}
 else
{
Response.Redirect("register.aspx");
 }
于 2016-09-23T20:45:51.920 回答