home | login | register | DMCA | contacts | help |      
mobile | donate | ВЕСЕЛКА

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я


my bookshelf | genres | recommend | rating of books | rating of authors | reviews | new | форум | collections | читалки | авторам | add
fantasy
space fantasy
fantasy is horrors
heroic
prose
  military
  child
  russian
detective
  action
  child
  ironical
  historical
  political
western
adventure
adventure (child)
child's stories
love
religion
antique
Scientific literature
biography
business
home pets
animals
art
history
computers
linguistics
mathematics
religion
home_garden
sport
technique
publicism
philosophy
chemistry
close

реклама - advertisement




Листинг 6.7. Код загрузки и обновления данных сразу в нескольких связанных таблицах

Private ds As DataSet

Private en As New SqlConnection( _

 "server=localhost;uid=sa;database=Novelty")

Private Sub btnFill_Click(ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles btnFill.Click

 Dim da As New SqlDataAdapter()

 grdCustomersOrders.DataSource = Nothing

 ds = New DataSet()

 ' Создание команды SELECT.

 da.SelectCommand = New SqlCommand()

 da.SelectCommand.Connection = cn

 da.SelectCommand.CommandType = CommandType.Text

 da.SelectCommand.CommandText = _

  "select * from tblCustomer; select * from tblOrder"

 ' Указание информативных имен для таблиц.

 da.TableMappings.Add("Table", "Customers")

 da.TableMappings.Add("Table1", "Orders")

 ' Загрузка данных, da.Fill(ds)

 ' Создание отношения.

 ds.Relations.Add("Customer_Orders", _

  ds.Tables("Customers").Columns("ID"), _

  ds.Tables("Orders").Columns("CustomerID"))

 ' Отображение данных.

 grdCustomersOrders.DataSource = ds

End Sub


Private Sub btnUpdate_Click(ByVal sender As System.Object, _

  ByVal e As System.EventArgs) Handles btnUpdate.Click

 ' Создание адаптеров данных.

 Dim daCustomers As New SqlDataAdapter( _

  "select * from tblCustomer", en)

 Dim daOrders As New SqlDataAdapter( _

  "select * from tblOrder", en)

 Dim cbCustomers As New SqlCommandBuilder(daCustomers)

 Dim cbOrders As New SqlCommandBuilder(daOrders)

 Try

  ' Внесение изменений в таблицы в "правильном"

  ' порядке (см. далее в тексте).

  Dim ChangedTable As New DataTable()

  ' Удаление записей в дочерней таблице.

  ChangedTable = _

   ds.Tables("Orders").GetChanges(DataRowState.Deleted)

  If Not ChangedTable Is Nothing Then

   daOrders.Update(ChangedTable)

  End If

  ' Все измененные записи в родительской таблице.

  ChangedTable = ds.Tables("Customers").GetChanges

  If Not ChangedTable Is Nothing Then

   daCustomers.Update(ChangedTable)

  End If

  ' Новые или измененные записи в дочерней таблице.

  ChangedTable = _

   ds.Tables("Orders").GetChanges(DataRowState.Added _

   Or DataRowState.Modified)

  If Not ChangedTable Is Nothing Then

   daOrders.Update(ChangedTable)

  End If

 Catch ex As Exception

  MessageBox.Show(ex.Message)

 End Try

End Sub

Первая подпрограмма btnFill_Click считывает обе таблицы из базы данных посредством одного обращения к базе данных благодаря выполнению пакета команд SQL. В объекте CommandText отдельные команды пакета отделяются точкой с запятой.

Обратите внимание, что предлагаемые по умолчанию имена таблиц Table и Table1 в приведенных ниже строках кода отображаются на более информативные имена Customers и Orders.

' Указание информативных имен для таблиц.

da.TableMappings.Add("Table", "Customers")

da. TableMappings.Add("Table1", "Orders")


Бизнес-ситуация 6.1: комбинация нескольких связанных таблиц | Обработка баз данных на Visual Basic®.NET | НА ЗАМЕТКУ