Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
60
Добавлен:
10.05.2014
Размер:
120.83 Кб
Скачать

Подготовка команды

Если нужно выполнить отдельное предложение SQL или процедуру, прежде всего, необходимо подготовить исполняемую команду. Для этого необходимо задать тип команды, ее текст и активное соединение, на котором будет выполняться команда.

Если требуется выполнить команду SQL, тогда тип команды – CommandType.Text, и в качестве текста команды задается SQL–предложение. При этом если в команде используются параметры, они должны быть заданы как именованные параметры с произвольным именем, например, @par, или @DocId. В ADO.NET не поддерживается символ ? в качестве placeholder в командах SQL; вместо него следует использовать произвольное имя параметра: "SELECT A, B, C FROM T WHERE X = @par".

Если требуется выполнить хранимую процедуру, тогда тип команды – CommandType.StoredProcedure, и в качестве текста команды задается имя хранимой процедуры.

Если объект cmd уже был создан ранее (с помощью команды new), тогда остается определить активное соединение, исполняемую команду и ее тип.

cmd.Connection = активное_соединение;

cmd.CommandType = тип_команды;

cmd.CommandText = текст_команды;

Объект cmd можно создать и непосредственно там, где нужно исполнять команду. В этом случае можно воспользоваться следующими методами:

SqlCommand cmd = new SqlCommand("текст_команды", активное_соединение);

cmd.CommandType = тип_команды;

Теперь можно открыть соединение:

con.Open();

выполнить команду:

исполнение_команды;

отображение_результатов;

и закрыть соединение:

con.Close();

Подготовка параметров

Прежде всего, если объект cmd используется неоднократно, следует удалить старые параметры:

cmd.Parameters.Clear();

Если объект cmd создается заново при каждом исполнении, этого можно не делать.

Параметры являются свойством команды и могут подготавливаться двумя способами: так же, как это делалось в ADO, и с помощью собственных возможностей ADO.NET.

В первом случае создается объект типа SqlParameter, определяются его свойства, и объект добавляется к команде:

SqlParameter p1 = new SqlParameter();

p1.ParameterName = "@par";

p1.DbType = тип_данных_параметра;

В этом случае тип данных параметра определяется как DbType.тип и может не соответствовать точно типам данных, существующим в MS SQL Server;

p1.Direction = ParameterDirection.направление;

p1.Value = значение;

cmd.Parameters.Add(p1);

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

SqlParameter p1 = cmd.Parameters.Add("имя_параметра", тип_данных_параметра);

В этом случае тип данных параметра определяется через Sqlтип_данных и соответствует типам, используемым в MS SQL Server;

p1.Direction = ParameterDirection.направление;

p1.Value = значение;

Выполнение команды select

Если необходимо выполнить команду SELECT или хранимую процедуру, выполняющую SELECT, при условии, что получаемый результат представляет собой справочные данные, не требующие изменений, чтение получаемых результатов целесообразно выполнять с помощью специального объекта типа DataReader. С помощью этого объекта более эффективно получается read-only, forward-only поток данных:

SqlDataReader dr = cmd.ExecuteReader();

Чтобы получить данные, следует к объекту dr в цикле применять метод Read():

while(dr.Read()){

. . .

}

Само значение получается с помощью методов группы GetXX(номер_колонки);

Здесь ХХ определяет, что именно хотим получить: Name – позволяет получить имя соответствующей колонки, тип данных – значение колонки (тип данных, указанный в методе GetXX(номер_колонки), должен соответствовать типу данных указанной колонки).

Свойство HasRows объекта dr позволяет определить, есть ли строки в результате; если dr.HasRows == true, следовательно, строки есть. Значение dr.HasRows не изменяется при получении данных из потока.