【发布时间】:2019-04-02 02:49:40
【问题描述】:
我在 C# 中创建了一个连接到 SQL Server 2008 的登录表单。数据读取器出现错误。我该怎么办?
这是我的决赛项目
SqlConnection con = new SqlConnection(@"Data Source=SAMSUNG-PC\SQLEXPRESS;Initial Catalog=LOGIN;Integrated Security=True");//this is my sql pc server name
SqlDataReader dr;
SqlCommand cmd = new SqlCommand("Select * from tbl_log where Username ='" + textBox1.Text + "' and Password = '", con);
con.Open();
cmd.Parameters.AddWithValue("un", textBox1.Text);
cmd.Parameters.AddWithValue("pw", textBox2.Text);
dr = cmd.ExecuteReader();//this is my problem//
if (dr.HasRows)//and this//
{
menu menu = new menu();
menu.Show();
this.Hide();
}
else
{
MessageBox.Show("error");
}
con.Close();
我希望得到这样的输出:如果密码正确,则转到新表单 如果密码不正确,则会出现消息框并显示“错误”。
【问题讨论】:
-
在数据访问中可能犯的最严重错误是:SQL 注入;你已经做到了……你的意思是
"Select * from tbl_log where Username = @un and Password = @pw"吗?您在安全方面可能犯的第二个最严重的错误是将密码存储为文本。你是二换二!第三个错误可能是:没有“处理”一次性物品 - 所以......在con、cmd和dr周围有很多using。第四个错误是让代码在一个方法中同时触及数据库和 UI :) 如果我要进行第五个错误,那就是:返回您不需要/使用的列。 -
在我看来,您至少试图通过使用
Parameters.AddWithValue来避免 SQL 注入,但您做错了。我怀疑您已经阅读了一些关于如何实现所需行为的不同来源,但是以一种没有意义的方式将它们混合在一起。 @Marc Gravell 有一些你应该听的非常好的观点。 -
哦,最后:使用 SQL Server 2008 - 虽然我在这里公平地说,并承认 提供了另外 3 个月的扩展支持。但是……来吧;现在是 2019 年!
标签: c# sql-server