5

当我想删除基于id_curse. 这是我的代码,这是我得到的错误:

Oracle.DataAccess.dll 中发生了“Oracle.DataAccess.Client.OracleException”类型的未处理异常。

附加信息:

外部组件引发的异常。

你能帮我解决这个问题吗?我认为 SQL 命令中的代码对此并不好。

private void button3_Click(object sender, EventArgs e)
{
    Oracle.DataAccess.Client.OracleConnection conn = new Oracle.DataAccess.Client.OracleConnection(provider);
    Oracle.DataAccess.Client.OracleCommand cmd = new Oracle.DataAccess.Client.OracleCommand();

    conn.Open();
    cmd = new Oracle.DataAccess.Client.OracleCommand(" DELETE * from CURSE  WHERE ID_CURSA  = '" +   textBox1.Text + "'", conn);
    cmd.ExecuteNonQuery();
}
4

1 回答 1

12

DELETE 语法如下

DELETE   from CURSE  WHERE ID_CURSA  = xxxxx
       ^ no * here

但是您应该使用参数化查询而不是字符串连接。字符串连接导致Sql Injection和解析问题(无法识别带引号、小数和日期的字符串)

string cmdText = "DELETE from CURSE WHERE ID_CURSA  = :ID"
using(OracleConnection conn = new OracleConnection(provider))
using(OracleCommand cmd = new OracleCommand(cmdText, conn))
{
     conn.Open();
     cmd.Parameters.AddWithValue("ID", textBox1.Text);
     cmd.ExecuteNonQuery();
}

作为旁注,您确定 ID_CURSA 是文本数据库字段吗?(您在值周围加上引号,所以我假设这是一个文本字段)

于 2013-06-20T11:04:27.447 回答