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

本文关键字:表单 登录 输入 验证 数据 数据库 | 更新日期: 2023-09-27 18:03:00

我想使用数据库作为数据源验证表单输入数据。我有以下函数运行,但当我输入错误或正确的数据时,它会抛出一个错误。

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());

对修复这个错误的任何帮助将是感激的。:)

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

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

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

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

另外,正如Volodymyr Melnychuk已经指出的,SQL字符串中的参数应该是将@uername改为@username


dbo.ClientLoginWHERE之间缺少一个空格。

代替

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

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

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