为什么此代码不会删除行并显示错误消息
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
try
{
String connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd=new SqlCommand("DELETE from [course] where cid ('"+cids.Text+"')",con);
con.Open();
cmd.ExecuteNonQuery();
Response.Redirect("done.aspx");
con.Close();
}
catch (SqlException)
{ Label1.Text = "error";
}
}
答案 0 :(得分:3)
使用SQL参数,您的代码完全不安全,修复它!
您的意思是使用SQL IN子句吗?这将是“WHERE cid IN(...)”,或者只是单个值“WHERE cid = ...”
请参阅Parameterize an SQL IN clause以使用带有IN子句的参数
答案 1 :(得分:1)
SqlCommand cmd=new SqlCommand("DELETE from [course] where cid ('"+cids.Text+"')",con);
应该是:
SqlCommand cmd=new SqlCommand("DELETE from [course] where cid IN ('"+cids.Text+"')",con);
注意cid和(
)之间的“in”假设你应该使用in
因为parens。但是,如果你只想要比较一个值,那么=
应该可以做到这一点。
另外,正如@TFD所述,您应该使用参数化SQL。此代码将允许SQL注入攻击。
答案 2 :(得分:1)
好的,你有没有在某处读过SQL语法?或者你只是把随意的东西扔在墙上并希望它粘在一起?
cid ('"+cids.Text+"')",
让我们忽略这样一个事实:这是被解雇的最佳方式 - 任何人都可以在您的数据库中执行任何随机SQL HE WANTS。坏消息 - 当您不检查输入时发生(cids.Text。
但是,如果我在文本框中有55,那就是残酷的sppeaking,转化为:
cid ('55')
好的,那是从哪里来的?
()表示IN子句,但没有IN。
SQL语法说质量是= - 这将是cid = 55
这个数字不是一个字符串(不需要'55',它是55)。
正确
cid = 55
请对文档进行一分钟的检查,有时候学习一门语言。有助于不将随机语句抛出到编译器中,希望它们是正确的。
答案 3 :(得分:0)
您忘记使用=
SqlCommand cmd=new SqlCommand("DELETE from [course] where cid ('"+cids.Text+"')",con);
此行应为
SqlCommand cmd=new SqlCommand("DELETE from [course] where cid ='"+cids.Text+"'",con);
或使用WHERE cid IN (...)
SqlCommand cmd=new SqlCommand("DELETE from [course] where cid IN ('"+cids.Text+"')",con);
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
try
{
String connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
SqlConnection con = new SqlConnection(connectionString);
SqlCommand cmd=new SqlCommand("DELETE from [course] where cid IN ('"+cids.Text+"')",con);
con.Open();
cmd.ExecuteNonQuery();
Response.Redirect("done.aspx");
con.Close();
}
catch (SqlException ex)
{
Label1.Text = "error";
}
}