我们在使用C# 编程的时候,经常会遇到操作数据库的地方,如果我们不注意,可能编写的代码就是下面这样
在前台定义了一个文本框,name值为btnName; 定义了一个查询按钮,name值为btnSearch,Click事件为 btnSearch_Click,
private void btnSearch_Click(object sender, RoutedEventArgs e)
{
using (SqlConnection conn = new SqlConnection("Data Source=.\\实例名;Initial Catalog=school;Persist Security Info=True;User ID=sa;Password=密码"))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "select * from student where stugrade='" +btnName.Text+ "'";
//执行多条结果集,使用ExecuteReader();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
string name = reader.GetString(1);
MessageBox.Show(name);
}
}
}
}
}
如果我们在 文本框中输入的不是我们的要查询的内容,而是这样一个字符串 1' or '1'='1 那么该查询将会一直返回true,那么就会把数据库中所有的数据都给爆出来
因此,我们将采用@ 符的方法
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
//cmd.CommandText = "select * from student where stugrade='" +btnName.Text+ "'";
cmd.CommandText = "select * from student where stugrade=@stugrade";
cmd.Parameters.Add(new SqlParameter("@stugrade",btnName.Text));
//执行多条结果集,使用ExecuteReader();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
string name = reader.GetString(1);
MessageBox.Show(name);
}
}
}
这种方式,也可以使用在 insert delete update 语句中
insert into .... values(@stugrade,@age);
delete .... where Id=@HaId;