Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Выполнение обновления или модификации базы данных с использованием DataCommand




Некоторые типы команд данных (OleDbCommand или SqlCorranand) при выполнении каких-либо действий над элементами базы данных не возвращают никаких данных кроме признака, что команда выполнена успешно. К ним относятся:

□ команды модификации структуры базы данных, которые используются для создания таблиц, хранимых процедур и других элементов с использованием языка описания структур базы данных (DDL);

□ команды обновления данных (Update, Insert и Delete).

Если в приложении используется набор данных Dataset, то нет необходимости выполнять обновление базы данных через объект DataCommand, поскольку эти функции может выполнить адаптер данных. Оба типа приведенных выше команд возвращают целое число, указывающее успешность выполнения соответствующей операции. Возвращаемое значе ние различно — в зависимости от того, модифицируете ли вы записи таблицы, или модифицируете структуру базы данных с помощью DDL-команд:

□ если вы создаете новые элементы базы данных или изменяете ее структуру, то возвращаемое значение равно -1, если операция завершилась успешно;

□ если вы модифицируете записи, возвращаемое значение указывает количество записей, которые были обработаны соответствующей операцией.

В обоих случаях, если в процессе выполнения операции произошел сбой, то команда возвращает значение 0.

Чтобы выполнить команду модификации базы данных, нужно проделать ряд шагов.

1. Добавьте команду данных к вашей форме или компоненту и сконфигурируйте выполняемые ею действия (сформируйте SQL-запрос или сошлитесь на хранимую процедуру).

2. Если команда имеет параметры, то определите их.

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

4. Добавьте программный код, чтобы открыть соединение, связанное с командой данных.

5. Вызовите метод команды ExecuteNonQuery, присвоив результат работы команды целочисленной переменной.

 

Примечание

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

6. Закройте соединение.

В следующем примере (листинг) показано, как создать новую таблицу в базе данных. Пример предполагает, что вы уже добавили к форме команду данных, соединение и сконфигурировали их. Действия, выполняемые командой, записываются в ее свойство CommandText. В данном случае используется SQL-инструкция createtable, которая создает таблицу из двух столбцов, один из которых является первичным ключом. После выполнения команда вернет значение -1, если таблица была успешно создана.

Листинг

' Visual Basic

Dim newtablecmd As String

Dim cmdresults As Integer

newtablecmd="CREATE TABLE LookupCodes (code_id smallint IDENTITY (1,1) _

PRIMARY KEY CLUSTERED, code_desc varchar(50) NOT NULL) "

OleDbCommand1. CommandType=CommandType.Text OleDbCormandl.CommandText=newtablecmd OleDbConnectionl.Open()

cmdresults=OleDbConimandl.ExecuteNonQuery() OleDbConnectionl.Close()

MessageBox.Show("After creating the table, results=" & cmdresults.ToString)

// C#

string newtablecmd;

int cmdresults;

newtablecmd="CREATE TABLE LookupCodes (code_id smallint IDENTITY(1,1)

PRIMARY KEY CLUSTERED, code_desc varchar(50) NOT NULL)";

OleDbCommand1.CommandType=CommandType.Text;

OleDbCommand1.CommandText=newtablecmd;

OleDbConnection1.Open();

cmdresults=OleDbCommand1.ExecuteNonQuery();

OleDbConnection1.Close();

MessageBox.Show("After creating the table, results=" + cmdresults.ToString());

Следующий пример (листинг) показывает, как использовать команду данных, чтобы модифицировать базу данных Pubs (SQL Server), вставляя новые записи в таблицу Authors. В данном случае, команда вызывает хранимую процедуру с именем NewAuthor, которая содержит инструкцию Insert Into с девятью значениями (параметрами) для новой записи автора. Команда OleDbCommand2 сконфигурирована таким образом, что имеет коллекцию параметров Parameters с девятью элементами, значения которых передаются в хранимую процедуру. Значения параметрам присваиваются в программном коде из текстовых полей формы. После открытия соединения вызывается метод ExecuteNonQuery, после чего соединение закрывается.

Листинг

' Visual Basic

Dim cmdresults As Integer

0leDbcommand2.CommandText="NewAuthor"

OleDbCommand2.CommandType=CommandType.StoredProcedure

0leDbCommand2.Parameters("au_id").Value=TextBox1.Text 0leDbCommand2.Parameters("au_lname").Value=TextBox2.Text 01eDbCommand2.Parameters("au_fname").Value=TextBox3.Text 0leDbCoramand2.Parameters("phone").Value=TextBox4.Text 01eDbCommand2.Parameters("address").Value=TextBox5.Text 0leDbCommand2. Parameters ("city"). Value=TextBox6. Text 01eDbCommand2.Parameters("st").Value=TextBox7.Text 0leDbCommand2.Parameters("zip").Value=TextBox8.Text 01eDbCommand2.Parameters("contract").Value=CheckBoxl.Checked

01eDbConnection2.Open()

Try

cmdresults=O1eDbcommand2.ExecuteNonQuery()

Catch ex as Exception

MessageBox.Show("Failed to execute command, err=" & ex.Message)

End Try

01eDbConnection2.Close() MessageBox.Show("Number of records inserted=" & cmdresults.ToString)

// C#

int cmdresults=O;

01eDbCommand2.CommandText="NewAuthor";

01eDbCommand2.CommandType=CommandType.StoredProcedure;

01eDbCommand2.Parameters["au_id"].Value=TextBox1.Text; 01eDbCommand2.Parameters["au_lname"].Value=TextBox2.Text; 01eDbCommand2.Parameters["au__fname"].Value=TextBox3.Text; 01eDbCommand2.Parameters["phone"].Value=TextBox4.Text; 01eDbCommand2.Parameters["address"].Value=TextBox5.Text; 01eDbCommand2.Parameters["city"].Value=TextBox6.Text; 01eDbCommand2.Parameters["st"].Value=TextBox7.Text; 01eDbCommand2.Parameters["zip"].Value=TextBox8.Text; 01eDbCommand2.Parameters["contract"].Value=CheckBoxl.Checked;

01eDbConnection2.Open();

try

{

cmdresults=OleDbCommand2.ExecuteNonQuery();

{

catch (Exception ex) MessageBox.Show("Failed to execute command, err=" + ex.Message);

}

}

OleDbConnection2.Close();

MessageBox.Show("Number of records inserted=" + cmdresults.ToString());

Задание команды Data Command, возвращающей одно значение

Достаточно часто в приложениях требуется выполнение команд, которые возвращают единственное (скалярное) значение. Типичные примеры: SQL-запрос возвращает результат работы агрегирующей функции (sum, count и тому подобное), хранимая процедура, получающая пароль и возвращающая разрешение на доступ к базе данных, или процедура, которая получает код изделия, а возвращает его наименование и т. д.

Чтобы задать команду, которая возвращает скалярное значение, нужно выполнить несколько этапов.

1. Добавьте объект DataCommand к форме или компоненту.

2. В свойстве CommandText объекта DataCommand определите SQL-запрос или имя хранимой процедуры.

3. Свойству CommandType задайте значение CommandType.Text (для SQL- запроса) или CommandType. StoredProcedure (для хранимой процедуры).

4. Если команда имеет параметры, то определите их.

5. Откройте соединение с источником данных, которое ассоциировано с данной командой.

6. Вызовите метод команды ExecuteScaiar, присвоив результат его работы переменной соответствующего типа.

7. Закройте соединение с источником данных.

Следующий пример (листинг) показывает, как использовать команду данных, чтобы выполнить инструкцию SQL, которая возвращает скалярное значение. В SQL-запросе данной команды делается обращение к таблице Products (Изделия). В качестве критерия (параметра) поиска нужного изделия используется его идентификационный номер. Возвращается целочисленное значение, указывающее количество заготовок для заданного изделия (UnitsInStock).

 

Листинг

' Visual Basic

Dim scalarcmd As String

Dim qtyinstock As Integer

scalarcmd="SELECT UnitsInStock FROM Products WHERE (ProductID=?)"

OleDbCortmand3.CommandType=CommandType.Text

OleDbCommand3.CommandText=scalarcmd

OleDbCommand3.Parameters("productid").Value=txtProductID.Text

OleDbConnectionl.Open()

qtyinstock=CType(01eDbCommand3.ExecuteScaiar(), Integer)

OleDbConnectionl.Close()

MessageBox.Show("QtyinStock=" & qtyinstock.ToString)

// C#

string scalarcmd;

int qtyinstock;

scalarcmd="SELECT UnitsInStock FROM Products WHERE (ProductID=?)";

OleDbCommand3.CommandType=CommandType.Text;

OleDbCommand3.CommandText=scalarcmd;

OleDbCommand3.Parameters["productid"].Value=txtProductID.Text;

OleDbConnectionl.Open();

qtyinstock=(int)(01eDbCommand3.ExecuteScaiar());

OleDbConnectionl.Close();

MessageBox.Show("QtyinStock=" + qtyinstock.ToString ());

 





Поделиться с друзьями:


Дата добавления: 2014-11-20; Просмотров: 589; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.024 сек.