Книга: Обработка баз данных на Visual Basic®.NET
Создание повторно используемых компонентов промежуточного уровня
Разделы на этой странице:
Создание повторно используемых компонентов промежуточного уровня
В этом разделе описано создание простого запроса в виде повторно используемого объекта. Основная цель данного примера — продемонстрировать способ создания функции в одном месте и использования ее сразу в нескольких приложениях. Создайте новый или откройте уже имеющийся проект Visual Basic .NET. Щелкните правой кнопкой мыши на имени проекта в окне Solution Explorer и выберите в контекстном меню команду Add?Add Component. В диалоговом окне Add New Item в текстовом поле Name введите имя нового компонента GetRowCount.vb.
НА ЗАМЕТКУ
Коды всех примеров в этой и предыдущей главах основаны на решении Novelty1. Пространство имен Novelty1 используется в остальных примерах данной главы.
После создания пустого компонента нужно включить в него код функции GetRowCount, которая возвращает целочисленное значение с количеством записей в таблице tblCustomers базы данных Novelty. В листинге 12.5 приведен полный код этого компонента.
ЛИСТИНГ 12.5. Код компонента GetRowCount.vb
Imports System.Data
Imports System.Data.SqlClient
Public Class GetRowCount
Inherits System.ComponentModel.Component
Public Function GetRowCount() As Integer
Try
Dim connString As String
' Помните обсуждение в главе 11 функции
' String.Intern? Если в памяти уже есть строка
' с тем же значением, то вместо создания нового
' экземпляра будет использована ссылка на нее.
connString = _
"server=(local);database=Novelty;TRUSTED_CONNECTION=Yes"
Dim conn As New SqlConnection(connString)
Dim cmd As New SqlCommand("select count(*) from tblCustomer", conn)
conn.Open() Dim dReader As SqlDataReader = _
cmd.ExecuteReader(CommandBehavior.CloseConnection)
While dReader.Read
' Включить первую и единственную запись
' в результирующий набор.
GetRowCount = dReader.GetValue(0)
End While
dReader.Close()
conn.Close()
Catch
System.Console.WriteLine("An error has occurred " & Err.Description)
End Try
End Function
#Region " Component Designer generated code "
Public Sub New(ByVal Container As System.ComponentModel.IContainer)
MyClass.New()
' Код, созданный конструктором компонентов.
Container.Add(Me)
End Sub
Public Sub New()
MyBase.New()
' Вызов метода, созданный конструктором компонентов.
InitializeComponent()
' Инициализация после вызова метода
InitializeComponent().
End Sub
' Переопределение метода Dispose для очистки списка компонентов.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
' Код, созданный конструктором компонентов.
Private components As System.ComponentModel.IContainer
' ЗАМЕЧАНИЕ: Код, созданный конструктором компонентов.
' Его можно изменять только с помощью конструктора компонентов
' Не изменяйте его вручную в окне редактирования кода.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
End Sub
#End Region
End Class
Более глубокое изучение иерархии наследования используемых компонентов выходит за рамки данной поэтому далее описывается лишь простой пример ее использования. Хотя в данном коде метод ToString не используется, но он применяется после компиляции вспомогательного кода. Для его применения нужно вставить в код строку Inherits System.ComponentModel.Component, которая позволяет использовать функции класса System.ComponentModel.Component, унаследованные от класса System.Object. Это наследование позволяет использовать функции данного класса без выполнения дополнительных действий.
Для компоновки нового компонента щелкните на его имени в окне Solution Explorer правой кнопкой мыши и выберите в контекстном меню команду Build. Теперь готовый компонент можно использовать, но как? Создайте Web-форму GetRowCountTest.aspx со вспомогательным кодом, который показан в листинге 12.6. Обратите внимание, что в самом начале кода используется строка импорта компонента Novelty1.GetRowCount с функциями компонента GetRowCount.
ЛИСТИНГ 12.6. Вспомогательный код GetRowCountTest.aspx.vb
Imports Novelty1.GetRowCount
Public Class GetRowCountTest Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
' Вызов метода, созданный конструктором компонентов.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Private Sub Page_Init(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Init
' CODEGEN: Этот вызов метода организован конструктором Web-форм.
' Не изменяйте его вручную в окне редактора кода. InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim GRC As New GetRowCount()
Response.Write(GRC.GetRowCount.ToString)
GRC.Dispose()
End Sub
End Class
Здесь совсем не обязательно вызывать метод Dispose, предназначенный для очистки памяти от уже не нужного объекта. Создав данную страницу и вставив в нее код, щелкните правой кнопкой мыши на ее имени в окне Solution Explorer и выберите в контекстном меню команду Build and Browse. После выполнения всех созданных сценариев и доступа к базе данных Novelty будет отображена Web-страница с числом 2000.
- Создание файлов с блокировкой
- Создание свободно позиционируемых элементов
- 12. Лекция: Создание приложений с графическим интерфейсом пользователя.
- Создание объектов Collection
- 7.4.2.4. Создание своего первого LiveCD
- 4.2. Создание трехмерной модели и построение горизонтальной проекции детали
- 7.4.2. Создание собственного LiveCD
- Создание пользователя и группы на рабочей станции
- Создание корня документа:
- Создание многофайловой базы данных
- Создание форм с несколькими вкладками
- Создание ярлыков в специальных папках