Использование параметров с соединением Oracle ODBC - PullRequest
1 голос
/ 01 мая 2009

Я успешно подключаюсь к базе данных Oracle 10g с драйвером Microsoft ODBC для Oracle.

Обычные запросы без параметров работают нормально, но параметризованные запросы действуют так, как будто параметры не передаются.

отл.

--this works fine
Select * from tbl1 where column1 = 'test'

--this doesn't
select * from tbl1 where column1 = ?

--odbc string parameter 'test'

Вот как выглядит моя строка подключения:

"Driver={Microsoft ODBC for Oracle}; " & _
 "CONNECTSTRING=(DESCRIPTION=" & _
 "(ADDRESS=(PROTOCOL=TCP)" & _
 "(HOST=" & pstrServer & ")(PORT=" & pintPort.ToString & "))" & _
 "(CONNECT_DATA=(SERVICE_NAME=" & pstrPhysicalName & "))); " & _
 "uid=" & pstrUserName & ";pwd=" & pstrPassword & ";"

И я добавляю параметры к моей команде ODBC следующим образом:

arrOdbcParam(index) = New OdbcParameter("@paramName", paramValue)

...

cmd.Parameters.AddRange(arrOdbcParam)

Простите за частично скопированный, несколько псевдо-код.

Ответы [ 3 ]

5 голосов
/ 19 января 2010

Немного некромантирования, но поскольку я только что боролся с подобной проблемой, вот как она работает с ODBC-драйвером для Centura SQLBase:

OdbcCommand com = con.CreateCommand();
com.CommandText = @"
  SELECT  thing
  FROM    table
  WHERE   searchInt = ? AND searchDat = ?";
com.Parameters.Add(new OdbcParameter("", OdbcType.Int)).Value = 12345;
com.Parameters.Add(new OdbcParameter("", OdbcType.DateTime)).Value = DateTime.Now;
OdbcDataReader reader = com.ExecuteReader();

Поиск в «таблице» записей со значением 12345 в «searchInt» и текущей даты в «serachDat».
На что обратить внимание:

  • Параметры помечены как ? в Команда SQL
  • Параметры не нуждаются в имени, но положение (и правильный тип) важно
2 голосов
/ 04 мая 2009

Параметры ODBC (отмеченные символом ?) связаны положением, поэтому необходимо убедиться, что вы добавили OdbcParameter s в правильном порядке. Их имя тогда неважно, но я бы предложил paramName без @, который является специфическим форматом имени SQL Server (или, скорее, Microsoft).

Вы также можете попытаться использовать формат параметров Oracle, который должен распознаваться драйвером Microsoft ODBC для Oracle и который позволяет вместо этого связывать по имени (хотя на 100% не уверен в этом):

  • Замените ? на :paramName в вашем запросе.
  • Назовите ваш параметр paramName.
1 голос
/ 01 мая 2009

Попробуйте использовать «: paramName» вместо «paramName».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...