使用C#从数据库中删除行

时间:2014-02-27 07:14:59

标签: c# mysql asp.net

为什么此代码不会删除行并显示错误消息

 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";
        }
    }

4 个答案:

答案 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";
        }
    }