C# 参数化OracleCommand/Bind变量,用于使用ODP.NET更新Oracle表?
我有一个Oracle 11g表,其中包含以下列名和类型:C# 参数化OracleCommand/Bind变量,用于使用ODP.NET更新Oracle表?,c#,oracle,plsql,odp.net,C#,Oracle,Plsql,Odp.net,我有一个Oracle 11g表,其中包含以下列名和类型: ID VARCHAR2(32 BYTE) VERSION VARCHAR2(12 BYTE) 我正在尝试使用ODP.NET和C#使绑定变量在Oracle参数化命令中工作,以用于此表上的Update语句,但我没有运气。以下是我正在使用的代码: string constr = gconstr + "; Data Source=" + db; OracleConnection con = new OracleConnection(constr
ID VARCHAR2(32 BYTE)
VERSION VARCHAR2(12 BYTE)
我正在尝试使用ODP.NET和C#使绑定变量在Oracle参数化命令中工作,以用于此表上的Update语句,但我没有运气。以下是我正在使用的代码:
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个参数的方法,则必须使用如下参数:
public OracleParameter Add(
string parameterName,
OracleType dataType,
int size
)
这是唯一适合重载的方法。采用方法的第三个参数类型时没有重载
我需要知道如何获得绑定变量和参数化Oracle
使用SQL Update命令的命令,例如上面的命令
要求
我建议你读一下这些
- 来自MSDN的类