使用数据库数据c#验证表单登录输入

时间:2014-05-11 18:36:00

标签: c# database forms login

我想使用数据库作为数据源来验证表单输入数据。我有以下功能运行,但是当我输入错误或核心数据时,它会抛出错误。

private void btnLogin_Click(object sender, EventArgs e)
{
    if (txtPassword.Text != "" && txtUsername.Text != "")
    {
        string queryText =
            "SELECT Count(*) FROM dbo.ClientLogin" +
            "WHERE ClientUserName = @uername AND ClientPassword = @password";

        SqlConnection scon = new SqlConnection(
            "Data Source=localhost;Initial Catalog=Clients;Integrated Security=True");
        SqlCommand command = new SqlCommand(queryText, scon);
        scon.Open();
        command.Parameters.AddWithValue("@username", txtUsername.Text);
        command.Parameters.AddWithValue("@password", txtPassword.Text);
        string result= Convert.ToString(command.ExecuteScalar());
        if (result.Length > 0)
        {
            frmMenu frmMenu = new frmMenu();
            frmMenu.ShowDialog();
        }
        else
            MessageBox.Show("User not found");
    }
    else
        MessageBox.Show("Enter username & password");
}

错误是:

  

SqlException未处理

声明:

string result = Convert.ToString(command.ExecuteScalar());

任何有关修复此错误的帮助将不胜感激。 :)

1 个答案:

答案 0 :(得分:1)

如果找不到用户,则会返回0的计数。由于您将此int结果转换为字符串"0",因此其长度为1"0".Length == 1

由于int(静态类型为ExecuteScalar())返回object结果,请将其转换为int,而不是将其转换为string

int result = (int)command.ExecuteScalar();
if (result > 0) {
   ...
} else {
   ...
}

另外,正如Volodymyr Melnychuk已经指出的那样,SQL字符串中的参数应该是 名为@username而不是@uername


您错过了dbo.ClientLoginWHERE之间的空格。

替换

string queryText = "... dbo.ClientLogin" +
    "WHERE ...";

通过

//                 see the space here  v
string queryText = "... dbo.ClientLogin " +
    "WHERE ...";

其他可能的原因:表名不正确,表不在dbo架构中,列名不正确,您没有所需的访问权限。