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

 

Реклама
bulletinsite.net -> Книги на сайте -> Вебмастеру -> Сеппа Д. -> "Microsoft ADO.NET" -> 170

Microsoft ADO.NET - Сеппа Д.

Сеппа Д. Microsoft ADO.NET — М.: Русская Редакция, 2003. — 640 c.
ISBN 5-7502-0223-2
Скачать (прямая ссылка): mcrsftado2003.pdf
Предыдущая << 1 .. 164 165 166 167 168 169 < 170 > 171 172 173 174 175 176 .. 260 >> Следующая

Передав изменения da.Update(tbl)
Подтверждаем изменения и закрываем транзакцию txn.Commit() cn.Close()
Visual C# .NET
string strConn, strSQL;
strConn = "Provider=SOLOLEDB; Data Source=(local)\\NetSDK;" + "Initial Catalog=Northwind;Trusted_Connsction=Yes;
strSQL = "SELECT OrderlD, ProductID, Quantity, UnitPrice " + "FROM [Order Details] WHERE OrderlD = 10503 + "ORDER BY ProductID";
DataTable tbl = new DataTableQ;
OLriDbCorirection er = new OjfiDr)Co.'ir.'.'Ct!.ori(strCfifin): OleDbDataAdapter da = new 01eDbDataAdapter(strSQL, cn)
//Define updating logic for the DataAdapter.
соединение и выбираем запроса
cn.0pen(); da.Fill(tbl);
//Иямвняе* содержимое объекта DataTable
//СОЗДЗИК НОВУЮ Pi-i^'i'ki.l'Ki
OleDbTransaction txn = cn.BeginTransaction{);
//Задаем значение свойства Transaction объектов Command,
//используемых объектом DataAdapter
da.UpdateCommand.Transaction = txn;
da,InsertCommand.Transaction = txn;
da.DeleteCommand.Transaction = txn;
//Передаем изменения da.Update{tЫ);
//Подтверждаем иэчекения и закрываем транзакцию 1хп.Сотт1и); сп.С1ове();
Когда логику обновления генерируют средствами объекта Сжъхп4*жШ&\ передавать изменения в транзакции несколько сложнее. В действительности создаваемый экземпляр объекта СоттапЫВшШегяе генерирует логику обновления. Он делает это лишь после того, как вы вызовете метод Dя;sЛdф^Update. Если вы хотите передавать изменения в транзакции с использованием объекта Command-описанная выше модель поведения создает некоторые проблемы,
390
Часть Автономная работа с данными; объект DataSet модели ADO NET
При попытке передать изменения с использованием аналогичного t'¦!;¦."> .ели..--му кода М >() м:т сгенерирует исключение:
Visual Basic .NET
Dim strConn, strSO. As String
Dim tbl As New DataTablef)
Dim cn As New OleDbConnection(strConn)
Dim da As New 01eDbDataAdapter(strSQL, cn)
Dim cb As New 01eDbCommandBuilder(da)
cn.OpenO
da.Fill<tbl)
Dim txn As OleDbTransaction = сп.Вемаит.ап«аси.»п()
da.Update(tbl)
txn.CommitO
cn.CLose()
Visual C# .NET string strConn, strSQL;
OataTable tbl = new DataTableO;
OleDbConnfection en = new QlsDbConnection(strCoir):
OleObDataAdapter da new 01e0b0ataAdeptHi4'strS0L. en);
OieDbCommandBijilder cb = new 01e0l<Comnar>dBuilder((!a):
cn.0pen{);
da.Fill(tbl);
OleDbTransaction txn = en. BeginTransactionQ : da.Update(tbl); txn.Commit(); cn.Close();
При вызове метода объект CommandBuilder выбирает из БД
нужные метаданные, используя свойство sck\ н'птпшш, объекта Мы
не сопоставили объект Command в свойстве SelectCommand с только что созданной транзакцией. Следовательно, объекту CommandBuilder^ удастся воспользоваться этим свойством, и он генерирует исключение.
Если добавить перед вызовом метода Update объекта DataAdapter такую строку, код успешно выполнится:
da.SeieotCoimand. Transeotior = txn
Однако это означает, что CommandBuilder выбирает из БД информацию схемы в транзакции. Вообще говоря, в течение транзакции следует как можно меньше трогать данные БД. Более удобный вариант — заставить объект CommandBuilder сгенерировать логику обновления перед началом транзакции, вызвав метод )nandBudder.GetlJpdateCommand(vimi GeilmertCommand. или GetDeleteCommand).
Затем, используя следующий код, можно сопоставить сгенерированные объектом CommandBuilder объекты Command с новым объектом Transaction, и DataAdapter передаст обновления в транзакции:
ГЛАВА 10 Передача обновлений в базу данных
391
Visual Basic .NET
Dim strOmn, strsol As String
Dim tbl As New DataTable() Dim cn As New OleDbConnection(strConn) Dim da As New 01eDbDataAdapter(strSQL, cn) Dim cb As New OleDbCommandBuilder(da) cn.Open()
cb.GetUpdateCommand() da.Fill(tbl)
Dim txn As OleDbTransaction = cn.8eginTransaction() cb.GetUpdateCommand.Transaction = txn cb.GetlnsertCommand.Transaction = txn cb.GetDeleteCommand.Transaction = txn da.Update(tbl) txn.Commit() cn.Close()
Visual C# .NET string strConn, strSQL;
DataTable tbl = new DataTable(); DleDbCoonection cn = new OlsDbConnection(strConr); DleDbDataAdapter da = new OleQbDataAcapterfstrSQL, cn); DleDbComnandBui]der cb = new OleDbCommandBuilderfda);
СП.open(};
cb. GetUpdateCommandO; da.Fill(tbl);
OleDbTransaction txn =
cb.GetUpdateCommandC).Transaction = txn; ob.GetlnsertCommandO. Transaction = txn; cb. GetDeleteCoiwnandC).Transaction = txn; da.Update(tbl); txn.Commit(); on.Close{);
Использование набора TableMappings
В главе 5 рассказывалось, что набор Table Mappings объекта DataAdapterопределяет, как метод DataAdapterI-таполняет объект DataSet. В следующем коде при вызове метода ЩЩрр^^создается новый объект Data Table, свойству TableName которого задается значение 'table:
Visual Basic
Dim strConn, strSQL As String
strConn = "Provider=SULOLEDB;Data Source=(local)\NetSDK; " & _ "Initial Catalog=Northwind;Trusted_Connection=Yes;"
strSQL = "SELECT OrderlD, ProductID, Quantity, UnitPrice " & _
392 Часть III Автономная работа с данными: объект DataSet модели ADQ.NET
"FROM [Order Details] WHERE OrderlD = 10503 " & _
Предыдущая << 1 .. 164 165 166 167 168 169 < 170 > 171 172 173 174 175 176 .. 260 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100