在SQL Server表

时间:2015-07-12 13:03:01

标签: c# sql asp.net sqlcommand

我需要创建一个包含逻辑的类,用于通过Login控件检查用户的SQL Server表。当我运行我的代码并在Login控件中输入数据时,它无法识别用户并写入错误消息。有人可以查看我的代码是否有错误?

这是类代码:

public int checkUser (string Username, string Password)
{
        using (SqlConnection sqlCnn = new SqlConnection(cnn))
        {
            Int32 count = 0;
            string sqlQuery = "SELECT COUNT(*) AS LoginInfo FROM users" +
                "WHERE Username = @Name AND Password = @Password";
            //sqlCnn.Open();

            using (SqlCommand comm = new SqlCommand(sqlQuery, sqlCnn))
            {
                //comm.Parameters.AddWithValue("@Name", Username);
                //comm.Parameters.AddWithValue("@Password", Password);
                comm.Parameters.Add("@Name", SqlDbType.NChar).Value = Username;
                comm.Parameters.Add("@Password", SqlDbType.NChar).Value = Password;

                try
                {
                    sqlCnn.Open();
                    count = (Int32)comm.ExecuteScalar();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error");
                }
                finally
                {
                    sqlCnn.Close();
                }

                return (Int32)count;
        }
    }
}

这是实施代码:

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
        User1 user = new User1();

        string name = Login1.UserName;
        string pass = Login1.Password;

        if (user.checkUser(name, pass) > 0)
        {
            Response.Redirect("mainPage.aspx");
        }
        else
        {
            Label1.Text = "Error";

        }
}

2 个答案:

答案 0 :(得分:1)

您的查询字符串应该出错:

  

SELECT COUNT(*)AS LoginInfo FROM usersWHERE Username = @Name AND Password = @Password

这可能是引起异常的原因。

我总是使用verbatim string literal,以便复制查询更容易,而且您不必考虑以空格结束或启动每个字符串:

string sqlQuery = @"SELECT COUNT(*) AS LoginInfo FROM users 
            WHERE Username = @Name AND Password = @Password";

而不仅仅是Console.WriteLine("错误");你应该写下例外:

catch (Exception ex)
{
    Console.WriteLine(ex.Message);
    Console.WriteLine(ex.StackTrace); //probably a good idea
}

如果它不是null,你也可以查看InnerException。

我看到您的变量用户名密码中有大字母。您应该将第一个字符更改为小写。 我也总是使用AddWithValue

comm.Parameters.AddWithValue("@Name", username);

答案 1 :(得分:0)

好的,我找到了问题的解决方案。第一个错误是在sql查询中。 我不应该将类接受的数据转发为值(Username = @Name ==> name = @Name)。 其次,在实施代码中,必须为重定向添加另一行才能将批准的用户转移到另一个页面:

FormsAuthentication.RedirectFromLoginPage(name, true);