【问题标题】:How can I delete a row from an Oracle database in C#?如何在 C# 中从 Oracle 数据库中删除一行?
【发布时间】:2013-06-17 04:59:14
【问题描述】:

当我想删除基于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();
}

【问题讨论】:

  • 您的代码非常不安全!请阅读 SQL 注入以及如何防范它。
  • 内部异常是什么?

标签: c# oracle sqlcommand


【解决方案1】:

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 是一个文本数据库字段吗? (您在值周围加上引号,所以我假设这是一个文本字段)

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 2018-12-19
    • 1970-01-01
    • 2015-12-19
    • 1970-01-01
    相关资源
    最近更新 更多