使用数据库数据验证表单登录输入
本文关键字:表单 登录 输入 验证 数据 数据库 | 更新日期: 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.ClientLogin
和WHERE
之间缺少一个空格。
string queryText = "... dbo.ClientLogin" +
"WHERE ...";
// see the space here v
string queryText = "... dbo.ClientLogin " +
"WHERE ...";
其他可能的原因:表名不正确,表不在dbo
模式中,列名不正确,您没有所需的访问权限