Imports System.Data.SqlClient

В теле определения класса для формы frmArchive включите код из листинга 4.10.

Листинг 4.10. Код архивирования данных в новой таблице

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

 ByVal e As System.EventArgs) Handles MyBase.Load

 lstYears.Items.Add("1995")

 lstYears.Items.Add("1996")

 lstYears.Items.Add("1997")

 lstYears.Items.Add("1998")

 lstYears.Items.Add("1999")

 lstYears.Items.Add("2000")

 lstYears.Items.Add("2001")

 lstYears.Items.Add("2002")

 ' Указание значения по умолчанию.

 lstYears.SelectedIndex = 0

End Sub

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

 ByVal e As System.EventArgs) Handles btnCancel.Click

 Me.Close()

End Sub

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

 ByVal e As System.EventArgs) Handles btnOK.Click

 Dim sql As String

 Dim result As Integer

 Dim records As Integer

 Dim SelectedYear As String

 ' Создание экземпляров объектов Connection и Command.

 Dim cnn As SqlConnection = New SqlConnection( _

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

 Dim cmd As New SqlCommand()

 Dim trans As SqlTransaction

 ' Получение значения года.

 SelectedYear = lstYears.SelectedItem.ToString

 ' Размещение кода внутри блока Try-Catch для

 ' обработки исключительных ситуаций.

 Try

  ' Открытие объекта Connection и запуск транзакции.

  cnn.Open()

  trans = cnn.BeginTransaction

  ' Включение команды в транзакцию.

  cmd.Connection = cnn

  cmd.Transaction = trans

  ' Указание команды SQL для вставки соответствующих

  ' записей в архивную таблицу.

  sql = "SELECT * INTO tblOrder" & SelectedYear & _

   FROM tblOrder WHERE year (OrderDate) = " & SelectedYear

  ' Передача текста команды SQL в транзакцию.

  cmd.CommandText = sql

  result = cmd.ExecuteNonQuery()

  ' Отображение результатов вставки записей в архивную таблицу.

  If result > 0 Then

   records = result MessageBox.Show(records & _

    " records inserted successfully into tblOrder" & SelectedYear)

  Else

   MessageBox.Show( _

    "No records inserted into tblOrder" & SelectedYear)

   ' При отсутствии записей созданная таблица

   ' не нужна и транзакцию нужно откатить.

   trans.Rollback()

  End If

  If records > 0 Then

   ' Команда SQL для удаления соответствующих

   ' записей из текущей таблицы.

   sql = "delete FROM tblOrder WHERE year (OrderDate) = " _

    & SelectedYear

   ' Эта команда находится в той же транзакции.

   cmd.CommandText = sql

   result = cmd.ExecuteNonQuery()

   ' Показать результаты удаления записей.

   If result = records Then

    MessageBox.Show(records & _

     " records deleted successfully")

    ' Все действия успешно выполнены, можно фиксировать транзакцию.

    trans.Commit()

   Else

    MessageBox.Show("No records deleted!")

   End If

  Else

   ' Никаких действий.

  End If

Перейти на страницу:

Похожие книги