×
Traktatov.net » Обработка баз данных на Visual Basic.NET » Читать онлайн
Страница 222 из 229 Настройки

Однако, к сожалению, хранимые процедуры можно использовать далеко не во всех ситуациях. Это ограничение наводит на мысль воспользоваться еще одним простым принципом определения кратчайшего пути как пути наименьшего сопротивления. В приведенном примере наименьшее сопротивление означает, что следующий уровень над уровнем данных используется для выполнения прикладной логики. Рассмотрим, как в многоуровневом приложении, где клиентский уровень используется только для отображения данных, можно реализовать остальные уровни.

Создание повторно используемых компонентов промежуточного уровня

В этом разделе описано создание простого запроса в виде повторно используемого объекта. Основная цель данного примера — продемонстрировать способ создания функции в одном месте и использования ее сразу в нескольких приложениях. Создайте новый или откройте уже имеющийся проект 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)