使用ODP.NET更新Oracle表的参数化OracleCommand / Bind变量?

时间:2013-01-08 22:23:28

标签: c# oracle plsql odp.net

我有一个Oracle 11g表,其中包含以下列名和类型:

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

我试图使用ODP.NET和C#在这个表上的Update语句的Oracle参数化命令中使用绑定变量,但我没有运气。这是我正在使用的代码:

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'";

我做错了什么?

我需要知道如何使用SQL Update命令(例如上面的命令)来获取绑定变量和参数化Oracle命令,因为我将开始最终更新其他表中的大型clobs(并将clobs连接为SQL中的字符串)当然会导致尺寸限制错误)。所以让这个工作将是第一次胜利。

1 个答案:

答案 0 :(得分:2)

在这一行;

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

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

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

这是唯一适合重载的方法。使用ParameterDirection.Input Parameters.Add()方法的OracleCommand的第三参数类型没有重载。

  

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

我建议你阅读这些内容;