Imports System.Data.SqlClient
В теле определения класса для формы frmArchive включите код из листинга 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