我正在尝试使用名为“Table”的数据库表中的用户名和密码创建登录表单。我观看了几个视频并查看了其他几个页面,似乎无法使查询正确运行。我的第二个try / catch块显示消息框“无法运行查询”。有人会看我的代码,看看有什么问题,请谢谢。
SqlConnection con = new SqlConnection();
string connectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Donovan\Documents\Work\Time Clock program\Time Clock program1.2\Time Clock program\Database1.mdf;Integrated Security=True;Connect Timeout=30;";
string query = "SELECT Count(*) FROM [Table] WHERE Username='" + usernameTextBox.Text +
"' AND Password = '" + this.passwordTextBox.Text + "'";
try
{
con = new SqlConnection(connectionString);
}
catch(Exception ex)
{
MessageBox.Show("Could not connect to Database");
MessageBox.Show(ex.Message);
}
try
{
if (!(usernameTextBox.Text == string.Empty))
{
if (!(passwordTextBox.Text == string.Empty))
{
SqlCommand cmd = new SqlCommand(query, con);
SqlDataReader dbr;
con.Open();
dbr = cmd.ExecuteReader();
int count = 0;
while (dbr.Read())
{
count = count + 1;
}
if (count == 1)
{
MessageBox.Show("username and password is correct");
}
else if (count > 1)
{
MessageBox.Show("Duplicate username and password", "login page");
}
else
{
MessageBox.Show(" username and password incorrect", "login page");
}
}
else
{
MessageBox.Show(" password empty", "login page");
}
}
else
{
MessageBox.Show(" username empty", "login page");
}
// con.Close();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
答案 0 :(得分:4)
我的钱是Bat
在TSQL中的reserved keyword。您可能希望将其与Table
一起使用。作为更好的方法,将表名更改为非 - 保留字。
但更重要的是,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
不要将密码存储为纯文本。阅读Best way to store password in database
使用using
statement自动处理您的连接和命令,而不是手动调用[Table]
或Close
方法。
顺便说一句,我强烈怀疑你可能想要Dispose
与ExecuteScalar
method一起使用,因为你对其他事情没有做任何事情。