Параметризованные переменные OracleCommand / Bind для обновлений таблицы Oracle с использованием ODP.NET?

2

У меня есть таблица Oracle 11g со следующими именами и типами столбцов:

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

Я пытаюсь заставить переменные связывания работать в команде Oracle с параметрами для операторов Update в этой таблице с использованием ODP.NET и С#, но мне не повезло. Вот код, который я использую:

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, такими как выше, как требование, потому что я начну, в конце концов, обновлять большие клобы в других таблицах (и конкатенировать клобы, поскольку строки в SQL будут, конечно вызвать ошибки ограничения размера). Поэтому получить эту работу будет первая победа.

  • 1
    Я не думаю, что вы можете использовать параметр для имени таблицы.
  • 1
    Я нашел [этот ответ в другом месте на сайте] [1], который может помочь вам. [1]: stackoverflow.com/questions/1179652/…
Теги:
plsql
odp.net

1 ответ

2
Лучший ответ

В этой строке;

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

Фактически вы пытаетесь добавить в качестве параметра имя своей таблицы (ddiTable). Вы не можете этого сделать. И нет смысла добавлять имя таблицы запросов в качестве параметра. И если вы хотите использовать метод Parameters.Add() с 3 параметрами, вы должны использовать его как параметры;

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

Это единственный способ перегрузки. Нет перегрузки для приема третьего параметра параметра ParameterDirection.Input of parameter.Add Parameters.Add().

Мне нужно знать, как получить переменные связывания и параметризованные команды Oracle, работающие с командами SQL Update, такими как выше, как требование.

Могу я предложить вам прочитать их;

  • 1
    Фантастика, спасибо, что нашли время, чтобы указать мне правильное направление.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню