我想使用数据库作为数据源来验证表单输入数据。我有以下功能运行,但是当我输入错误或核心数据时,它会抛出错误。
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 :(得分: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.ClientLogin
和WHERE
之间的空格。
替换
string queryText = "... dbo.ClientLogin" +
"WHERE ...";
通过
// see the space here v
string queryText = "... dbo.ClientLogin " +
"WHERE ...";
其他可能的原因:表名不正确,表不在dbo
架构中,列名不正确,您没有所需的访问权限。