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

 

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

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

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

SqtSingle real
Sqllrvtie smalllnt
System.Object sqLvariant
SqIByte tinyint
SqIGuid uniqueidentifler
Работа с управляемым провайдером SQL 681
Вставка новых записей при помощи SqIDataAdapter
Мы сделали крутой поворот от типов управляемого провайдера OLE DB к типам управляемого провайдера SQL, по наша задача осталась прежней: выяснить, как обеспечить запись измененных данных в базу данных на источнике при помощи объектов DataAdapter. Первое, с чем мы познакомимся - со вставкой новых записей при помощи SqIDataAdapter (еще раз отметим, что с точки зрения использования в коде программы разницы между Sql DataAdapter и 01 eDbDataAdapter почти никакой нет). Как обычно, первое, что необходимо сделать — открыть соединение с базой данных:
public class HySqIDataAdapter {
public static void MainO і
Il Шаг 1: Создаем соединение и объект SqIDataAdapter Il (с командой SELECT) SqIConnection cn = new
Sqi Connect! on (" 5 e rver=(1 oca 1); ui d=sa; pwd= ¦. dat abase-Ca rs"):
SqIDataAdapter dAdapt - new SqIDataAdapter("Select * fron inventory, cn
// Шаг 2: Если в таблице уже присутствует запись с нонером. совпадающий с номером вставляемой нами записи, удаляем ее cn.DpenO;
sqico-ішпи kniend = new SqlConwncK"Oeiete from Inventory where
•1111'", cn).
ik і 11 Cmd, ExecuteNonQue ry (): cn.Closet);
1
}
что бросается в глаза, — изменилось содержание строки подключения. При работе с управляемым провайдером SQL не указывается значение для Provi der (поскольку мы всегда подключаемся к SQL Server), кроме того, в целом используется несколько другой набор пар имя — значение. После того как соединение с использованием строки подключения установлено, мы уже действуем привычным путем: создаем объект SqIDataAdapter и определяем для него текст запроса SQL^e-рез конструктор.
Шаг второй нашего кода - это устранение возможных проблем, которые могут быть связаны с тем, что в таблице в базе данных уже есть запись с совпадающим значением CarID. В этой ситуации нам просто не дадут произвести вставку (помните, что на столбец CarID наложено ограничение первичного ключа?). Поэтому мы на всякий случай решаем эту проблему наиболее простым способом.
После того как соединение установлено, следующая наша задача — создать новый объект для представления команды SQL INSERT. Конечно же, для представления этой команды будет использован объект SqI Command, адля параметров команды INSERT - объект SqlParameter:
public static void MainO !
// Шаг З: создаем команду INSERT
dAdapt. InsertCoimarKl = new Sql Commando IKSi г INTO Inventory" +
"(CarID. Make, Color. PetName) VALUES" + "№rID. (SMake, OColor, PPetName)", cn)";
682 Глава 13 • Доступ к данным при помощи ADO.NET
// Шаг 4: Начинаеи работу по созданию параметров дли каждого столбца
// в таблице Inventory
SqIParameter workParam = null;
Il Параметр для столбца CarIO
workParam - d. Adapt. I nsertCorrmand. Parameters. Add (new SqI Parameter "(aCarID".
SqlDbType.Int));
workParam.SourceColumn = "CarIO";
workParam.SourceVersion = DataRowVersion.Current:
Jl Параметр для столбца Make
workParam = d.Adapt.InsertCommand.Parameters.Add(new SqlParameter("@Make".
SqlDbType.VarChar));
workParam. SourceCol umn = "Make";
workParam.SourceVersion = DataRowVersion.Current:
Il Параметр для столбца Color
workParam - d.Adapt. InsertCommand.Parameters.AddCnew SqlParameter( "(aColor".
SqlDbType.VarChar));
workParam. SourceCol umn = "Color";
workParam.SourceVersion = DataRowVersion.Current:
II Параметр для столбца PetName
workParam = d .Adapt. InsertCoirciand. Parameters. AddSnew SqI Parameter "@PetName".
SqlDbType.VarChar)):
workParam.SourceColumn * "PetName":
workParam.SourceVersion = DataRowVersion.Current;
}
Теперь мы готовы к тому, чтобы произвести вставку новой строки в DataSet (предварительно мы его создадим и заполним данными из источника) и записать произведенные изменения из DataSet обратно в источник данных. Кроме того, для наглядности мы также выведем то, что у нас получилось, на консоль при помощи ранее созданной нами функции PrintTableO:
public static vcvi femO {
// Шаг 5: Создаем eatект DataSet и заполняем его данными базы данных
// на источнике:
DataSet myDS = new DataSetO:
t.FilKmyDS. "Inventory"); PnntTable(myDS);
Il Шаг б: добавляен новую запись в таблицу в DataSet
DataRow newRow - myOS.Tables["Invertory" j.HewRow():
newRow["CarI0"] - 1111:
newRow["Make"] = "SlugBug";
newRow["Calor"] = "Pink";
newRowf'PetName"] - "Cranky":
myDS.Tables["Inventory"].Rows.Add(newRow);
// Шаг 7: Передаем изменения на источник данных и проверяем это
try
{
dAdapt.UpdateOnyDS. "Inventory"):
myDS.Dispose О:
myDS = new DataSetO;
dAdapt.Fill(myDS, "Inventory");
Работа с управляемым провайдером SQL 683
IPnntTable(myDS):
)
catcrKException е) {
Console.WriteCe.ToSt ringt));
>
}
Результат работы нашей программы представлен на рис. 13.28.
Код приложения lnsertRt>wsWIthSqiAdapter можно найти в подкаталоге Chapter 13.
Изменение записей в таблице при помощи
SqlDataAdapter
Предыдущая << 1 .. 270 271 272 273 274 275 < 276 > 277 278 279 280 281 282 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100