Настройка параметров подключения и параметров уровня команды на уровне доступа к данным (VB)Configuring the Data Access Layer's Connection- and Command-Level Settings (VB)

по Скотт Митчеллby Scott Mitchell

Скачать код или скачать PDFDownload Code or Download PDF

Адаптеры таблиц в типизированном наборе данных автоматически подключаются к базе данных, выдают команды и заполняют объект DataTable результатами.The TableAdapters within a Typed DataSet automatically take care of connecting to the database, issuing commands, and populating a DataTable with the results. Однако в некоторых случаях мы хотим самостоятельно принять эти сведения, а в этом учебнике мы рассмотрите, как получить доступ к параметрам подключения к базе данных и на уровне команд в TableAdapter.There are occasions however when we want to take care of these details ourselves, and in this tutorial we learn how to access the database connection- and command-level settings in the TableAdapter.

ВведениеIntroduction

В рамках серии руководств мы использовали типизированные наборы данных для реализации уровня доступа к данным и бизнес-объектов нашей многоуровневой архитектуры.Throughout the tutorial series we have used Typed DataSets to implement the Data Access Layer and business objects of our layered architecture. Как обсуждалось в первом учебном курсе, объекты DataTables типизированного набора данных служат в качестве репозиториев данных, тогда как адаптеры таблиц выступают в качестве оболочек для взаимодействия с базой данных для получения и изменения базовых данных.As discussed in the first tutorial, the Typed DataSet s DataTables serve as repositories of data whereas the TableAdapters act as wrappers to communicate with the database to retrieve and modify the underlying data. Адаптеры таблиц инкапсулируют сложность работы с базой данных и избавляет от необходимости писать код для подключения к базе данных, выдавать команду или заполнять результаты в таблицу DataTable.The TableAdapters encapsulate the complexity involved in working with the database and saves us from having to write code to connect to the database, issue a command, or populate the results into a DataTable.

Однако бывают случаи, когда нам нужно бурров в глубину TableAdapter и написать код, который работает непосредственно с объектами ADO.NET.There are times, however, when we need to burrow into the depths of the TableAdapter and write code that works directly with the ADO.NET objects. Например, при внесении изменений в базу данных в рамках руководства по транзакциям мы добавили в TableAdapter методы для начала, фиксации и отката ADO.NET транзакций.In the Wrapping Database Modifications within a Transaction tutorial, for example, we added methods to the TableAdapter for beginning, committing, and rolling back ADO.NET transactions. Эти методы использовали внутренний, вручную созданный SqlTransaction объект, который был назначен SqlCommand объектам TableAdapter.These methods used an internal, manually-created SqlTransaction object that was assigned to the TableAdapter s SqlCommand objects.

В этом учебнике мы рассмотрим, как получить доступ к параметрам подключения к базе данных и на уровне команд в TableAdapter.In this tutorial we will examine how to access the database connection- and command-level settings in the TableAdapter. В частности, мы добавим функции к ProductsTableAdapter, которая обеспечивает доступ к базовой строке подключения и параметрам времени ожидания команды.In particular, we will add functionality to the ProductsTableAdapter that enables access to the underlying connection string and command timeout settings.

Работа с данными с помощью ADO.NETWorking with Data Using ADO.NET

Платформа Microsoft .NET содержит множество классов, предназначенных специально для работы с данными.The Microsoft .NET Framework contains a plethora of classes designed specifically to work with data. Эти классы, находящиеся в пространстве именSystem.Data, называются классами ADO.NET .These classes, found within the System.Data namespace, are referred to as the ADO.NET classes. Некоторые классы в области ADO.NET привязаны к определенному поставщику данных.Some of the classes under the ADO.NET umbrella are tied to a particular data provider. Поставщик данных можно представить как коммуникационный канал, который позволяет передавать данные между классами ADO.NET и базовым хранилищем данных.You can think of a data provider as a communication channel that allows information to flow between the ADO.NET classes and the underlying data store. Существуют обобщенные поставщики, например OleDb и ODBC, а также поставщики, специально разработанные для конкретной системы баз данных.There are generalized providers, like OleDb and ODBC, as well as providers that are specially designed for a particular database system. Например, хотя можно подключиться к базе данных Microsoft SQL Server с помощью поставщика OleDb, Поставщик SqlClient гораздо более эффективен, так как он разработан и оптимизирован специально для SQL Server.For example, while it is possible to connect to a Microsoft SQL Server database using the OleDb provider, the SqlClient provider is much more efficient as it was designed and optimized specifically for SQL Server.

При программном доступе к данным обычно используется следующий шаблон:When programmatically accessing data, the following pattern is commonly used:

  1. Установите соединение с базой данных.Establish a connection to the database.
  2. Выполните команду.Issue a command.
  3. Для запросов SELECT работает с результирующими записями.For SELECT queries, work with the resulting records.

Для выполнения каждого из этих шагов существуют отдельные классы ADO.NET.There are separate ADO.NET classes for performing each of these steps. Для подключения к базе данных с помощью поставщика SqlClient, например, используйте классSqlConnection.To connect to a database using the SqlClient provider, for example, use the SqlConnection class. Чтобы выдать команду INSERT, UPDATE, DELETEили SELECT в базу данных, используйте классSqlCommand.To issue an INSERT, UPDATE, DELETE, or SELECT command to the database, use the SqlCommand class.

За исключением внесения изменений в базу данных в рамках учебника по транзакциям, нам не пришлось писать какой-либо код ADO.NET низкого уровня, так как автоматически созданный код TableAdapter включает функции, необходимые для подключения к базе данных, выполнения команд, получения данных и заполнения этих данных в DataTables.Except for the Wrapping Database Modifications within a Transaction tutorial, we have not had to write any low-level ADO.NET code ourselves because the TableAdapters auto-generated code includes the functionality needed to connect to the database, issue commands, retrieve data, and populate that data into DataTables. Однако могут возникнуть ситуации, когда нам нужно настроить эти низкоуровневые настройки.However, there may be times when we need to customize these low-level settings. В следующих нескольких шагах мы рассмотрим, как коснуться объектов ADO.NET, используемых внутренне адаптерами таблиц.Over the next few steps we will examine how to tap into the ADO.NET objects used internally by the TableAdapters.

Шаг 1. изучение свойства ConnectionStep 1: Examining with the Connection Property

Каждый класс TableAdapter имеет свойство Connection, которое указывает сведения о подключении к базе данных.Each TableAdapter class has a Connection property that specifies database connection information. Этот тип данных свойства и ConnectionString значение определяются параметрами, выбранными в мастере настройки адаптера таблицы.This property s data type and ConnectionString value are determined by the selections made in the TableAdapter Configuration wizard. Вспомним, что при первом добавлении TableAdapter к типизированному набору данных этот мастер запрашивает источник базы данных (см. рис. 1).Recall that when we first add a TableAdapter to a Typed DataSet this wizard asks us for the database source (see Figure 1). Раскрывающийся список на первом шаге включает в себя базы данных, указанные в файле конфигурации, а также любые другие базы данных в подключениях к данным обозреватель сервера s.The drop-down list in this first step includes those databases specified in the configuration file as well as any other databases in the Server Explorer s Data Connections. Если используемая база данных не существует в раскрывающемся списке, можно указать новое подключение к базе данных, нажав кнопку Создать подключение и указав необходимые сведения о подключении.If the database we want to use does not exist in the drop-down list, a new database connection can be specified by clicking the New Connection button and providing the needed connection information.

первого шага мастера настройки адаптера таблицыThe First Step of the TableAdapter Configuration Wizard

Рис. 1. первый шаг мастера настройки TableAdapter (щелкните, чтобы просмотреть изображение с полным размером)Figure 1: The First Step of the TableAdapter Configuration Wizard (Click to view full-size image)

Давайте рассмотрим код для свойства Connection TableAdapter.Let s take a moment to inspect the code for the TableAdapter s Connection property. Как отмечалось в учебнике Создание уровня доступа к данным , можно просмотреть автоматически созданный код TableAdapter, перейдя в окно Представление классов, выполнив детализацию до соответствующего класса, а затем дважды щелкнув имя этого элемента.As noted in the Creating a Data Access Layer tutorial, we can view the auto-generated TableAdapter code by going to the Class View window, drilling down to the appropriate class, and then double-clicking the member name.

Перейдите в окно представление классов, перейдя в меню Вид и выбрав представление классов (или нажав клавиши CTRL + SHIFT + C).Navigate to the Class View window by going to the View menu and choosing Class View (or by typing Ctrl+Shift+C). В верхней половине окна представление классов перейдите к пространству имен NorthwindTableAdapters и выберите класс ProductsTableAdapter.From the top half of the Class View window, drill down to the NorthwindTableAdapters namespace and select the ProductsTableAdapter class. Элементы ProductsTableAdapter s будут отображаться в нижней половине представление классов, как показано на рис. 2.This will display the ProductsTableAdapter s members in the bottom half of the Class View, as shown in Figure 2. Дважды щелкните свойство Connection, чтобы увидеть его код.Double-click the Connection property to see its code.

Дважды щелкните свойство Connection в представление классов, чтобы просмотреть его автоматически созданный код.

Рис. 2. дважды щелкните свойство Connection в представление классов, чтобы просмотреть его автоматически созданный код.Figure 2: Double-Click the Connection Property in the Class View to View Its Auto-Generated Code

Свойства Connection TableAdapter и другой код, связанный с соединением, приведены ниже.The TableAdapter s Connection property and other connection-related code follows:

Private _connection As System.Data.SqlClient.SqlConnection
Private Sub InitConnection()
    Me._connection = New System.Data.SqlClient.SqlConnection
    Me._connection.ConnectionString = _
        ConfigurationManager.ConnectionStrings("NORTHWNDConnectionString").ConnectionString
End Sub
Friend Property Connection() As System.Data.SqlClient.SqlConnection
    Get
        If (Me._connection Is Nothing) Then
            Me.InitConnection
        End If
        Return Me._connection
    End Get
    Set
        Me._connection = value
        If (Not (Me.Adapter.InsertCommand) Is Nothing) Then
            Me.Adapter.InsertCommand.Connection = value
        End If
        If (Not (Me.Adapter.DeleteCommand) Is Nothing) Then
            Me.Adapter.DeleteCommand.Connection = value
        End If
        If (Not (Me.Adapter.UpdateCommand) Is Nothing) Then
            Me.Adapter.UpdateCommand.Connection = value
        End If
        Dim i As Integer = 0
        Do While (i < Me.CommandCollection.Length)
            If (Not (Me.CommandCollection(i)) Is Nothing) Then
                CType(Me.CommandCollection(i), _
                    System.Data.SqlClient.SqlCommand).Connection = value
            End If
            i = (i + 1)
        Loop
    End Set
End Property

При создании экземпляра класса TableAdapter переменная-член _connection равна Nothing.When the TableAdapter class is instantiated, the member variable _connection is equal to Nothing. При доступе к свойству Connection сначала проверяется наличие экземпляра переменной-члена _connection.When the Connection property is accessed, it first checks to see if the _connection member variable has been instantiated. Если это не так, вызывается метод InitConnection, который создает экземпляр _connection и задает для его свойства ConnectionString значение строки подключения, указанное на первом шаге мастера настройки адаптера таблицы.If it has not, the InitConnection method is invoked, which instantiates _connection and sets its ConnectionString property to the connection string value specified from the TableAdapter Configuration wizard s first step.

Свойство Connection также может быть назначено объекту SqlConnection.The Connection property can also be assigned to a SqlConnection object. Это связывает новый объект SqlConnection с каждым из SqlCommand объектов TableAdapter.Doing so associates the new SqlConnection object with each of the TableAdapter s SqlCommand objects.

Шаг 2. предоставление параметров уровня подключенияStep 2: Exposing Connection-Level Settings

Сведения о соединении должны оставаться инкапсулированными в TableAdapter и быть недоступны другим слоям в архитектуре приложения.The connection information should remain encapsulated within the TableAdapter and not be accessible to other layers in the application architecture. Однако могут возникнуть ситуации, когда доступ к данным на уровне подключения TableAdapter должен быть доступен или настраиваемым для запроса, пользователя или страницы ASP.NET.However, there may be scenarios when the TableAdapter s connection-level information needs to be accessible or customizable for a query, user, or ASP.NET page.

Добавим ProductsTableAdapter в наборе данных Northwind, чтобы включить свойство ConnectionString, которое может использоваться уровнем бизнес-логики для чтения или изменения строки подключения, используемой TableAdapter.Let s extend the ProductsTableAdapter in the Northwind DataSet to include a ConnectionString property that can be used by the Business Logic Layer to read or change the connection string used by the TableAdapter.

Note

Строка подключения — это строка, указывающая сведения о подключении к базе данных, такие как используемый поставщик, расположение базы данных, учетные данные для проверки подлинности и другие параметры, связанные с базой данных.A connection string is a string that specifies database connection information, such as the provider to use, the location of the database, authentication credentials, and other database-related settings. Список шаблонов строк подключения, используемых различными хранилищами данных и поставщиками, см. в разделе connectionStrings.com.For a list of connection string patterns used by a variety of data stores and providers, see ConnectionStrings.com.

Как обсуждалось в учебнике Создание уровня доступа к данным , автоматически создаваемые классы типизированного набора данных можно расширить с помощью разделяемых классов.As discussed in the Creating a Data Access Layer tutorial, the Typed DataSet s auto-generated classes can be extended through the use of partial classes. Сначала создайте новую вложенную папку в проекте с именем ConnectionAndCommandSettings под папкой ~/App_Code/DAL.First, create a new subfolder in the project named ConnectionAndCommandSettings underneath the ~/App_Code/DAL folder.

Добавить вложенную папку с именем Коннектионандкоммандсеттингс

Рис. 3. Добавление вложенной папки с именем ConnectionAndCommandSettingsFigure 3: Add a Subfolder Named ConnectionAndCommandSettings

Добавьте новый файл класса с именем ProductsTableAdapter.ConnectionAndCommandSettings.vb и введите следующий код:Add a new class file named ProductsTableAdapter.ConnectionAndCommandSettings.vb and enter the following code:

Namespace NorthwindTableAdapters
    Partial Public Class ProductsTableAdapter
        Public Property ConnectionString() As String
            Get
                Return Me.Connection.ConnectionString
            End Get
            Set(ByVal value As String)
                Me.Connection.ConnectionString = value
            End Set
        End Property
    End Class
End Namespace

Этот разделяемый класс добавляет свойство Public с именем ConnectionString в класс ProductsTableAdapter, который позволяет любому слою считывать или обновлять строку подключения для базового соединения TableAdapter.This partial class adds a Public property named ConnectionString to the ProductsTableAdapter class that allows any layer to read or update the connection string for the TableAdapter s underlying connection.

Если этот разделяемый класс создан (и сохранен), откройте класс ProductsBLL.With this partial class created (and saved), open the ProductsBLL class. Перейдите к одному из существующих методов и введите Adapter а затем нажмите клавишу точка, чтобы открыть IntelliSense.Go to one of the existing methods and type in Adapter and then hit the period key to bring up IntelliSense. В IntelliSense должно отобразиться новое свойство ConnectionString, означающее, что можно программно считывать или изменять это значение из BLL.You should see the new ConnectionString property available in IntelliSense, meaning that you can programmatically read or adjust this value from the BLL.

Предоставление доступа ко всему объекту соединенияExposing the Entire Connection Object

Этот разделяемый класс предоставляет только одно свойство базового объекта соединения: ConnectionString.This partial class exposes just one property of the underlying connection object: ConnectionString. Если необходимо сделать весь объект соединения доступным за пределами TableAdapter, можно изменить уровень защиты Connection свойств.If you want to make the entire connection object available beyond the confines of the TableAdapter, you can alternatively change the Connection property s protection level. Автоматически созданный код, который мы рассматривали на шаге 1, показал, что свойство Connection TableAdapter помечено как Friend, то есть к нему могут обращаться только классы в той же сборке.The auto-generated code we examined in Step 1 showed that the TableAdapter s Connection property is marked as Friend, meaning that it can only be accessed by classes in the same assembly. Однако это можно изменить с помощью свойства ConnectionModifier TableAdapter.This can be changed, however, via the TableAdapter s ConnectionModifier property.

Откройте Northwind набор данных, щелкните ProductsTableAdapter в конструкторе и перейдите к окно свойств.Open the Northwind DataSet, click on the ProductsTableAdapter in the Designer, and navigate to the Properties window. Вы увидите, что ConnectionModifier задано значение по умолчанию Assembly.There you will see the ConnectionModifier set to its default value, Assembly. Чтобы сделать свойство Connection доступным вне сборки типизированного набора данных, измените свойство ConnectionModifier на Public.To make the Connection property available outside of the Typed DataSet s assembly, change the ConnectionModifier property to Public.

уровень доступности свойства подключения s можно настроить с помощью свойства Коннектионмодифиер.The Connection Property s Accessibility Level Can Be Configured via the ConnectionModifier Property

Рис. 4. уровень доступности Connection свойств s можно настроить с помощью свойства ConnectionModifier (щелкните, чтобы просмотреть изображение с полным размером)Figure 4: The Connection Property s Accessibility Level Can Be Configured via the ConnectionModifier Property (Click to view full-size image)

Сохраните набор данных, а затем вернитесь к классу ProductsBLL.Save the DataSet and then return to the ProductsBLL class. Как и ранее, перейдите к одному из существующих методов и введите Adapter а затем нажмите клавишу точка, чтобы открыть IntelliSense.As before, go to one of the existing methods and type in Adapter and then hit the period key to bring up IntelliSense. В список должен входить свойство Connection, означающее, что теперь можно программно считывать или назначать любые параметры уровня соединения из слоя BLL.The list should include a Connection property, meaning that you can now programmatically read or assign any connection-level settings from the BLL.

Адаптер таблицы TableAdapter состоит из основного запроса, который по умолчанию содержит автоматически созданные инструкции INSERT, UPDATEи DELETE.A TableAdapter consists of a main query that, by default, has auto-generated INSERT, UPDATE, and DELETE statements. Эти основные запросы INSERT, UPDATEи DELETE реализуются в коде TableAdapter s как объект адаптера данных ADO.NET через свойство Adapter.This main query s INSERT, UPDATE, and DELETE statements are implemented in the TableAdapter s code as an ADO.NET data adapter object via the Adapter property. Как и свойство Connection, тип данных Adapter свойства s определяется используемым поставщиком данных.Like with its Connection property, the Adapter property s data type is determined by the data provider used. Поскольку в этих учебниках используется поставщик SqlClient, свойство Adapter имеет тип SqlDataAdapter.Since these tutorials use the SqlClient provider, the Adapter property is of type SqlDataAdapter.

Свойство Adapter TableAdapter имеет три свойства типа SqlCommand, которые используются для выписки INSERT, UPDATEи DELETE.The TableAdapter s Adapter property has three properties of type SqlCommand that it uses to issue the INSERT, UPDATE, and DELETE statements:

  • InsertCommand
  • UpdateCommand
  • DeleteCommand

Объект SqlCommand отвечает за отправку определенного запроса в базу данных и имеет такие свойства, как: CommandText, который содержит специальный оператор SQL или хранимую процедуру для выполнения. и Parameters— коллекция объектов SqlParameter.A SqlCommand object is responsible for sending a particular query to the database and has properties like: CommandText, which contains the ad-hoc SQL statement or stored procedure to execute; and Parameters, which is a collection of SqlParameter objects. Как мы видели в учебнике Создание уровня доступа к данным , эти командные объекты можно настроить с помощью окно свойств.As we saw back in the Creating a Data Access Layer tutorial, these command objects can be customized through the Properties window.

В дополнение к основному запросу TableAdapter может включать переменное число методов, которые при вызове отправляют указанную команду в базу данных.In addition to its main query, the TableAdapter can include a variable number of methods that, when invoked, dispatch a specified command to the database. Основной объект команды запроса и командные объекты для всех дополнительных методов хранятся в свойстве CommandCollection TableAdapter.The main query s command object and the command objects for all additional methods are stored in the TableAdapter s CommandCollection property.

Давайте взглянем на код, формируемый ProductsTableAdapter в наборе данных Northwind для этих двух свойств и их вспомогательных переменных-членов и вспомогательных методов:Let s take a moment to look at the code generated by the ProductsTableAdapter in the Northwind DataSet for these two properties and their supporting member variables and helper methods:

Private WithEvents _adapter As System.Data.SqlClient.SqlDataAdapter
Private Sub InitAdapter()
    Me._adapter = New System.Data.SqlClient.SqlDataAdapter
    
    ... Code that creates the InsertCommand, UpdateCommand, ...
    ... and DeleteCommand instances - omitted for brevity ...
End Sub
Private ReadOnly Property Adapter() As System.Data.SqlClient.SqlDataAdapter
    Get
        If (Me._adapter Is Nothing) Then
            Me.InitAdapter
        End If
        Return Me._adapter
    End Get
End Property
Private _commandCollection() As System.Data.SqlClient.SqlCommand
Private Sub InitCommandCollection()
    Me._commandCollection = New System.Data.SqlClient.SqlCommand(8) {}
    ... Code that creates the command objects for the main query and the ...
    ... ProductsTableAdapter�s other eight methods - omitted for brevity ...
End Sub
Protected ReadOnly Property CommandCollection() As System.Data.SqlClient.SqlCommand()
    Get
        If (Me._commandCollection Is Nothing) Then
            Me.InitCommandCollection
        End If
        Return Me._commandCollection
    End Get
End Property

Код для свойств Adapter и CommandCollection точно имитируется в свойстве Connection.The code for the Adapter and CommandCollection properties closely mimics that of the Connection property. Существуют переменные элементов, которые содержат объекты, используемые свойствами.There are member variables that hold the objects used by the properties. Методы доступа Get свойства начинаются с проверки, является ли соответствующая переменная-член Nothing.The properties Get accessors start by checking to see if the corresponding member variable is Nothing. Если это так, вызывается метод инициализации, который создает экземпляр переменной-члена и назначает основные свойства, связанные с командой.If so, an initialization method is called which creates an instance of the member variable and assigns the core command-related properties.

Шаг 4. предоставление параметров на уровне командStep 4: Exposing Command-Level Settings

В идеале сведения на уровне команды должны оставаться инкапсулированными в слое доступа к данным.Ideally, the command-level information should remain encapsulated within the Data Access Layer. Эта информация должна быть необходима на других уровнях архитектуры, однако она может быть предоставлена через разделяемый класс, как и параметры уровня соединения.Should this information be needed in other layers of the architecture, however, it can be exposed through a partial class, just like with the connection-level settings.

Так как TableAdapter имеет только одно свойство Connection, код для предоставления параметров уровня соединения довольно прост.Since the TableAdapter only has a single Connection property, the code for exposing connection-level settings is fairly straightforward. При изменении параметров на уровне команды это немного сложнее, так как TableAdapter может иметь несколько командных объектов: InsertCommand, UpdateCommandи DeleteCommand, а также переменное число объектов Command в свойстве CommandCollection.Things are a bit more complicated when modifying command-level settings because the TableAdapter can have multiple command objects - an InsertCommand, UpdateCommand, and DeleteCommand, along with a variable number of command objects in the CommandCollection property. При обновлении параметров на уровне команды эти параметры необходимо распространить на все командные объекты.When updating command-level settings, these settings will need to be propagated to all of the command objects.

Например, представьте, что в TableAdapter были определенные запросы, выполнение которых заняло слишком много времени.For example, imagine that there were certain queries in the TableAdapter that took an extraordinary long time to execute. При использовании TableAdapter для выполнения одного из этих запросов может потребоваться увеличить CommandTimeout свойствакомандного объекта.When using the TableAdapter to execute one of those queries, we might want to increase the command object s CommandTimeout property. Это свойство указывает количество секунд ожидания выполнения команды, по умолчанию — 30.This property specifies the number of seconds to wait for the command to execute and defaults to 30.

Чтобы разрешить настройку свойства CommandTimeout BLL, добавьте следующий метод Public в ProductsDataTable с помощью файла разделяемого класса, созданного на шаге 2 (ProductsTableAdapter.ConnectionAndCommandSettings.vb):To allow the CommandTimeout property to be adjusted by the BLL, add the following Public method to the ProductsDataTable using the partial class file created in Step 2 (ProductsTableAdapter.ConnectionAndCommandSettings.vb):

Public Sub SetCommandTimeout(ByVal timeout As Integer)
    If Me.Adapter.InsertCommand IsNot Nothing Then
        Me.Adapter.InsertCommand.CommandTimeout = timeout
    End If
    If Me.Adapter.DeleteCommand IsNot Nothing Then
        Me.Adapter.DeleteCommand.CommandTimeout = timeout
    End If
    If Me.Adapter.UpdateCommand IsNot Nothing Then
        Me.Adapter.UpdateCommand.CommandTimeout = timeout
    End If
    For i As Integer = 0 To Me.CommandCollection.Length - 1
        If Me.CommandCollection(i) IsNot Nothing Then
            Me.CommandCollection(i).CommandTimeout = timeout
        End If
    Next
End Sub

Этот метод можно вызвать из слоя BLL или представления, чтобы задать время ожидания команды для всех команд, решаемых этим экземпляром TableAdapter.This method could be invoked from the BLL or Presentation Layer to set the command timeout for all commands issues by that TableAdapter instance.

Note

Свойства Adapter и CommandCollection помечаются как Private, то есть доступ к ним можно получить только из кода в TableAdapter.The Adapter and CommandCollection properties are marked as Private, meaning they can only be accessed from code within the TableAdapter. В отличие от свойства Connection эти модификаторы доступа не настраиваются.Unlike the Connection property, these access modifiers are not configurable. Поэтому, если необходимо предоставить свойства на уровне команд другим слоям в архитектуре, необходимо использовать описанный выше подход к разделяемому классу, чтобы предоставить Public метод или свойство, считывающее и записывающее данные в объекты команд Private.Therefore, if you need to expose command-level properties to other layers in the architecture you must use the partial class approach discussed above to provide a Public method or property that reads or writes to the Private command objects.

СводкаSummary

Адаптеры таблиц в типизированном наборе данных служат для инкапсуляции сведений о доступе к данным и сложности.The TableAdapters within a Typed DataSet serve to encapsulate data access details and complexity. С помощью адаптеров таблиц нам не нужно беспокоиться о написании кода ADO.NET для подключения к базе данных, выдаче команды или заполнении результатов в DataTable.Using TableAdapters, we do not have to worry about writing ADO.NET code to connect to the database, issue a command, or populate the results into a DataTable. Все это автоматически обрабатывается для нас.It is all handled automatically for us.

Однако иногда требуется настроить низкоуровневые ADO.NET, например изменить строку подключения или значения по умолчанию для соединения или времени ожидания команды.However, there may be times when we need to customize the low-level ADO.NET specifics, such as changing the connection string or the default connection or command timeout values. TableAdapter автоматически создает Connection, Adapterи CommandCollection свойства, но по умолчанию это Friend или Private.The TableAdapter has auto-generated Connection, Adapter, and CommandCollection properties, but these are either Friend or Private, by default. Эта внутренняя информация может быть предоставлена путем расширения TableAdapter с помощью разделяемых классов для включения Public методов или свойств.This internal information can be exposed by extending the TableAdapter using partial classes to include Public methods or properties. Кроме того, модификатор доступа к свойству TableAdapter Connection можно настроить с помощью свойства ConnectionModifier TableAdapter.Alternatively, the TableAdapter s Connection property access modifier can be configured through the TableAdapter s ConnectionModifier property.

Поздравляем с программированием!Happy Programming!

Об автореAbout the Author

Скотт Митчелл, автор семи книг по ASP/ASP. NET и основатель 4GuysFromRolla.com, работал с веб-технологиями Майкрософт с 1998.Scott Mitchell, author of seven ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Скотт работает как независимый консультант, преподаватель и модуль записи.Scott works as an independent consultant, trainer, and writer. Его последняя книга — Sams обучать себя ASP.NET 2,0 за 24 часа.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Он доступен по адресу mitchell@4GuysFromRolla.com.He can be reached at mitchell@4GuysFromRolla.com. или через его блог, который можно найти по адресу http://ScottOnWriting.NET.or via his blog, which can be found at http://ScottOnWriting.NET.

Специальная благодарностьSpecial Thanks To

Эта серия руководств была рассмотрена многими полезными рецензентами.This tutorial series was reviewed by many helpful reviewers. Потенциальные рецензенты для этого руководства были Бурнадетте Леигх, S REN Джейкоб Лауритсен, Терезой Мерфи и Хилтон Жеисенов.Lead reviewers for this tutorial were Burnadette Leigh, S ren Jacob Lauritsen, Teresa Murphy, and Hilton Geisenow. Хотите ознакомиться с моими будущими статьями MSDN?Interested in reviewing my upcoming MSDN articles? Если это так, расположите строку в mitchell@4GuysFromRolla.com.If so, drop me a line at mitchell@4GuysFromRolla.com.