参数化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连接为字符串当然会导致大小限制错误)。因此,让这个工作将是第一个胜利。
本行;
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命令更新