Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 277

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 271 272 273 274 275 276 < 277 > 278 279 280 281 282 283 .. 320 >> Следующая

Процесс изменения существующих строк в таблице на источнике данных очень похож на процесс вставки новых строк. Как обычно, мы начинаем с создания объекта Sql DataAdapter и открытия соединения с базой данных. Далее наша задача — воспользоваться свойством InsertCommand:
public static void MainC)
// Шаг 1: ¦.¦¦¦:%¦•¦:¦¦ объект Sq'IOataAdapter и открываем соединение Сакзяогйчис // предыдущему примеру, поэтому эту часть кода опускаем)
// Шаг 2: Создаем команду UPADTE
dAdapt.UpdateCommand = new SqICommandt"UPDATE inventory set Мзке=№1аке,
Color=3Color, PetName=@PetName where CarlD - KarIO", cn);
// Шаг З: CoaRSSK объекты параметров для каждого столбца в таблице Inventory.
// Все так ¦ как и в предыдущем прй.Чвре. только мы помещаем эти параметры
// в коллекцию ParameterCollection для UpdateCoimand. например: SqIParameter workParara = null:
Рис. 13.28. Применение свойства InsertCommand
684 Глава • Доступ к данным при помощи ADO.NET
workParam = dAdapt.UpdateCommand. Parameters. Add (new Sq1Parameter("(aCari;r.
SqIDbTyре.Int)).
workParam.SourceColumn = "CarlD";
workParam.SourceVersion = DataRowVersion,Current:
// Делаем то же самое длр столбцов PetName, Make и Color
,// Шаг 4; Заполняем данными ооіект DataSet DataSet myDS - new DataSetO: dAdapt.Fi 11(myDS, "Inventory"); PrintTable(myDS):
// Шаг 5: Меняем значения столбцов во второй строке таблицы на TooFoo' DataRow changeRow - myDS.Tables["Inventory"],Row[l]; changeROWfMake"] = "FooFoo"; changeRow["Color"] = "FooFoo"; Ch angeRowf PetName"] = "FooFoo";
Il Шаг б: Сохраняем данные в базе данных и выводки значения на консоль.
try
I
dAdapt.Update(myDS. "Inventory"):
myDS.DisposeO;
myDS = new DataSetO:
dAdapt.Fill(myDS. "Inventory");
PrintTableCmyDS);
catchtExceotion e)
{ Console.Write(e.ToStringO): }
}
Результат работы программы представлен на рис. 13.29.
Here - і:Т:...ї ¦'<•¦ «awe 8-><|(t1- now I
PetMane
Chiscky
Snake
Zippy Buddha Rusty
CapIB Hake
a BMW
і FooF
\2 Saat
ІЗ BHW
4 ?:-(':
Иакє Color
BMW Red
FooFoo Green
Saab Bed
StW fin If
Co it Dust
Here is we Мл='; right пъы-
CarlD Make Color PetNane
S №№ lted Chucky
I FooFoo FtsoFoo FooFoo
2 Sa яЬ tied Zippy »uddha
1 DHH Pink
4 Colt Rust Busty
'•'>¦>.•'•• •¦ any JtK у to continue
Рис. 13.29. Внесение изменений в существующие записи в базе данных
Код приложения UpdateRovsWit SqI Adapter можно найти в подкаталоге Chapter 13.
Автоматическое создание команд SQL 685
Автоматическое создание команд SQL
Мы їр.'Я.ко что научились вставлять, удалять и изменять данные при ;!¦ л:;п объектов Ol eDbDataAdapter и SqI DataAdapter. Работу с этими типами не назовешь особенно сложной, но создание отдельного параметра для каждого из столбцов тл<> л п-ны и передача их через свойства InsertCoiTresnd, 'JpciateCommri'id и DeleteCornKind может показаться несколько утомительной. вы уже догадываетесь, что есть и
более удобный способ.
Этот способ заключается в применении класса SclformiandBuilder, Если мы ботаем с объектом DataTable, состоящим из единственной таблицы (а не результатом объединения нескольких таблиц), то SqI CommandBui 1 der автоматически настроит свойства Insert Command. UpdateOftrgnd и DeleteConrriann в соответствии с тем, что мы шначально использовали для свойства Однако применяться
SqICommandBui lder может не всегда. Помимо ограничений, связанных с объединениями, о которых мы уже говори. ;п. должно обязательно выполняться еще одно условие: для таблицы должен быть определен первичный ключ, и этот ключ должен использоваться в исходном запросе — команде SELECT. Главное же преимущество применения Sq 1 CommandBui lder заключается в том, что нам нет необходимости создавать объекты SqI Parameter вручную.
Рассмотрим применение SqlCornmandBui IderHa примере. Предположим, что в нашем распоряжении имеется форма Windows, на которой расположен элемент управления uataSri d. Пользователь может редактировать записи прямо в Da UGh d, а по завершении он должен нажать специальную кнопку, чтобы сохранить изменения в базе данных. Конструктор для нашей формы будет выглядеть так:
руЫ'с class ma inform : System. Kl rOaws .Foims .Form {
private SqIConnection cn = new
SqKonnection<"server-(local ):uid=sa;pwd=:database=Cars");
private Sqipa^aapter dAdapt:
privateSqICommandBuilder і nvBui lder: private DataSet myDS = new OataSetO:
private System.Windows.Forms.DataGrid dataGridl: private System.Windows.Forms.Button btnUpdateData: private System.ComponentModel.Container components:
public mainFormO: f
Initial іzeConponents();
Il Создаек исходную команду SELECT
dAdapt = new SqlDataAdaptert"SELECT * from Inventory", cn):
// А сейчас кгжанйы INSERT. UPDATE и DELETE будут сгенерированы Il автоматически
invBuider = new SqlCommandBuilder(dAdapt);
Il Заполняем DataSet и привязываем к нему DataGrid dAdapt.Fi11(myDS. "Inventory"):
686 Глава 13 • Доступ к данным при помощи ADO.NET
de^aQrld? .ОэгаБоигсе = ir.yDS.'i'3bies[ • inventory"] .Defaul tVie*:
!
Теперь у SqlDataAdapter есть вся необходимая информация для записи данных из DataGri d обратно в источник данных. Код для события Click нашей кнопки будет талии:
Предыдущая << 1 .. 271 272 273 274 275 276 < 277 > 278 279 280 281 282 283 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100