参数化oraclec命令/绑定变量更新Oracle表使用ODP.NET

本文关键字:Oracle NET ODP 更新 变量 oraclec 命令 绑定 参数 | 更新日期: 2023-09-27 17:50:59

我有一个Oracle 11g表,其列名和类型如下:

ID VARCHAR2(32 BYTE)
VERSION VARCHAR2(12 BYTE)

我试图让绑定变量在Oracle参数化命令中工作,用于使用ODP更新该表上的语句。. NET和c#,但我没有运气。下面是我使用的代码:

string constr = gconstr + "; Data Source=" + db;
OracleConnection con = new OracleConnection(constr);
con.Open();
ddiId = "WS_5043";
ddiVer = "1.0.3";
string UPDATE_CLOB_QUERY = "UPDATE :ddiTable SET version=:ddiVer WHERE id=:ddiId";
Oracle.DataAccess.Types.OracleXmlType ret;
OracleCommand oracleCommand2 = new OracleCommand(UPDATE_CLOB_QUERY, con);
oracleCommand2.Parameters.Clear();
oracleCommand2.Parameters.Add("ddiId", OracleDbType.Varchar2, ParameterDirection.Input).Value = ddiId;
oracleCommand2.Parameters.Add("ddiTable", OracleDbType.Varchar2, ParameterDirection.Input).Value = ddiTable;
oracleCommand2.Parameters.Add("ddiVer", OracleDbType.Varchar2, ParameterDirection.Input).Value = ddiVer;
oracleCommand2.ExecuteNonQuery();
oracleCommand2.Dispose();

当我在VS2010中运行上述代码时,我得到以下Oracle错误:

ORA-01036: illegal variable name/number

然而,当我在SQL中删除绑定变量声明时,上面的工作即

string UPDATE_CLOB_QUERY = "UPDATE wstable SET version='1.0.2' WHERE id='WS_5043'";

我做错了什么?

我需要知道如何将绑定变量和参数化的Oracle命令与SQL Update命令一起工作,例如上面的命令作为要求,因为我将最终开始更新其他表中的大型clob(并且在SQL中将clob连接为字符串当然会导致大小限制错误)。因此,让这个工作将是第一个胜利。

参数化oraclec命令/绑定变量更新Oracle表使用ODP.NET

本行;

oracleCommand2.Parameters.Add("ddiTable", OracleDbType.Varchar2, ParameterDirection.Input).Value = ddiTable;

您实际上尝试添加表名(ddiTable)作为参数。你不能这么做。并且没有必要将查询表名称添加为参数。如果您想使用3个参数的Parameters.Add()方法,则必须使用as参数,如;

public OracleParameter Add(
    string parameterName,
    OracleType dataType,
    int size
)

这是唯一适合的重载方法。

Parameters.Add()方法中ParameterDirection.Input的第三种参数类型时不存在重载。

我需要知道如何获得绑定变量和参数化的Oracle使用SQL Update命令(如上面的命令)的命令要求。

我可以建议你读这些吗?

  • 来自MSDN的OracleCommand类。
  • Oracle Update Statements
  • Oracle update SQL Tips
  • Sql命令更新