Руководство по работе с БД Firebird с использованием библиотеки ADO .Net 2.0

       

Параметры команд


В большинстве случаев при выполнении команды требуется задать её параметры. Параметры добавляются в коллекцию Parameters. Они могут быть именованные и позиционные. Пример команды с позиционными параметрами:

insert into country (country,currency) values(?,?)

С именованными:

insert into country (country,currency) values(:country,:currency)

IBProvider сам умеет формировать список параметров, производя анализ SQL выражения. Но, к сожалению, в ADO .Net необходимо вручную добавлять эти параметры, т.к. команда не запрашивает их описание у Ole Db провайдера. Если вспомнить ADO, то в нем список параметров прекрасно формировался без необходимости вмешиваться в этот участок кода.

Для того, чтобы добавить параметр, нужно воспользоваться:

  • для добавления именованного параметра и значения - методом AddWithValue()
  • для добавления как именованных, так и неименованных параметров - перегруженным методом Add()
  • Если не указан тип параметра, он будет добавлен с Ole Db типом VarWChar, что соответствует .Net типу string, что кажется разумным. Об этом не стоит беспокоиться, т.к. IBProvider корректно обрабатывает приведение любых типов Firebird.

    Нельзя не сказать о существующих ограничениях при использовании именованных параметров совместно с OleDbCommand. В MSDN написано, что именованные параметры поддерживаются только для поставщиков данных MSSQL и Oracle, а для поставщиков данных Ole Db и ODBC поддерживаются только позиционные параметры. Использовать именованные параметры все же можно, но их добавление в коллекцию Parameters необходимо осуществлять в том же порядке, в каком они следуют в запросе. К примеру, если текст команды:

    update country set currency=:currency where country =:country

    то сначала необходимо добавить параметр currency, а потом country:

    cmd.Parameters.AddWithValue("currency", "Rouble"); cmd.Parameters.AddWithValue("country", "Russia");

    Задавать значения параметров можно уже в произвольном порядке:

    cmd.Parameters["country"].Value = "Latvia"; cmd.Parameters["currency"].Value = "Lat";



    Содержание раздела