5

に基づいて行全体を削除したいときに問題がありid_curseます。これは私のコードであり、これは私が得る私のエラーです:

タイプ 'Oracle.DataAccess.Client.OracleException' の未処理の例外が Oracle.DataAccess.dll で発生しました。

追加情報:

外部コンポーネントが例外をスローしました。

問題を解決するのを手伝ってもらえますか? 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 インジェクションと解析の問題が発生します (引用符、小数点、日付を含む文字列は認識されません)

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 に答える