C# 参数化OracleCommand/Bind变量,用于使用ODP.NET更新Oracle表?

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

我有一个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);
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的类

我认为您不能使用参数作为表名。我确实在网站的其他地方找到了[1]可能对您有所帮助的答案。[1] :太棒了,谢谢你花时间给我指出了正确的方向。