如何在c#中验证网站的密码和用户名

时间:2016-10-10 05:29:16

标签: c# asp.net validation passwords username

我有一个简单的登录网站,这是我在Visual Studio 2015中的第一个网站项目。我已经成功创建了一个SQL数据库,其中包含用户信息,如用户名,密码,电子邮件和国家,我也成功创建了用户注册新用户可以在其中输入详细信息的页面,这些详细信息将添加到数据库中。一切正常。

但我尝试根据SQL数据库中包含用户数据的行中的存储值验证用户名和密码时遇到了障碍,以便用户可以访问仅限成员的页面。

当用户点击登录按钮时,我会看到我的代码段。

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MembersConnectionString"].ConnectionString);
        con.Open();
        string checkUser = "SELECT * FROM Members where Username= '" + TextBoxSignUser.Text + "' and Password= '" + TextBoxSignPass.Text + "'";
        SqlCommand cmd = new SqlCommand(checkUser, con);
        cmd.ExecuteNonQuery();
        con.Close();

我知道我需要做的事情可能就像下面的伪代码一样,但我不确定如何针对数据库中的存储值验证此信息。

if ("Username" and "Password" == the value of Username and Password TextBox.Text)
{
        Response.Write("Sign in successful");
        Response.Redirect("MemberTestPage.aspx");
}
else
{
Response.Write("Details incorrect, Please try again")
}

5 个答案:

答案 0 :(得分:1)

我认为首先使用ADO.NET库会出于某些原因(如最佳性能和高安全性)。这是我的建议。希望对你有用:

using System.Data.SqlClient;
...

string conStr = ConfigurationManager.ConnectionStrings["MembersConnectionString"].ConnectionString;
string sql = "SELECT * FROM Members where Username = @user and Password = @pass";
SqlParameter pUser = new SqlParameter("@user", TextBoxSignUser.Text);
SqlParameter pPass = new SqlParameter("@pass", TextBoxSignPass.Text);
using (SqlConnection con = new SqlConnection(conStr))
{
    using (SqlCommand cmd = new SqlCommand(sql, con))
    {
        cmd.Parameters.Add(pUser);
        cmd.Parameters.Add(pPass);

        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            if (reader.Read())
            {
                // Successfully signed in
                // Also you can access your fields' value using:
                //    1. its index (e.x. reader[0])
                //    2. or its name: (e.x. reader["Username"])
            }
            else
            {
                // Login failed
            }
        }
    }
}

答案 1 :(得分:0)

使用数据适配器填充数据表将数据导入数据表,您可以获取查询的返回值并匹配参数

        DataTable Dt = new Datatable();
        SqlDataAdapter sda = new SqlDataAdapter(cmd);
        sda.Fill(dt);

        if (dt.rows.count > 0 ) 
        {
           //MATCH FOUND
        }

答案 2 :(得分:0)

你可以使用like ..

string query= "SELECT * FROM Members where Username= 'usr' and Password= 'pwd'";
    SqlCommand cmd = new SqlCommand(query, con);
    MySqlDataAdapter objda = new MySqlDataAdapter(cmd);
    DataSet objDs = new DataSet();
    objda.Fill(objDs);
    if(objDs.Tables[0].Rows.Count>0)
    {
          Response.Write("Sign in successful");
          Response.Redirect("MemberTestPage.aspx");
    }

答案 3 :(得分:0)

您可以在不使用数据集的情况下执行以下操作

var con = new SqlConnection("your connection string goes here");
SqlCommand cmd = new SqlCommand("SELECT * FROM Members where Username= 'usr' and Password= 'pwd'", con);
bool result = false;
cmd.Connection.Open();
using (cmd.Connection)
{
    SqlDataReader dr = cmd.ExecuteReader();
    if (dr.HasRows)
        result = true;
}
if (result == true)
    // Login successful
else
    // Login failed

答案 4 :(得分:0)

string query = string.Format("SELECT TOP 1 * FROM [Table] WHERE Username = '{0}' and Password = '{1}'", txtUsername.Text, txtPassword.Text);
command = new OleDbCommand(query, con);
var reader = command.ExecuteReader();

if (reader.HasRows)
{
  //successfully login
}
else
  //error message