2

我有一个包含以下列名称和类型的 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 更新命令(例如上面的命令)一起使用,因为我最终将开始更新其他表中的大型 clob(当然,在 SQL 中将 clob 连接为字符串)导致大小限制错误)。所以让它发挥作用将是第一个胜利。

4

1 回答 1

2

在这一行;

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

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

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

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

我需要知道如何获取绑定变量和参数化 Oracle 命令与 SQL 更新命令(如上述命令)一起使用。

我可以建议你阅读这些吗?

于 2013-01-08T22:48:12.600 回答