Veri Erişim Katmanının Bağlantısını ve Komut Düzeyi Ayarlarını Yapılandırma (VB)Configuring the Data Access Layer's Connection- and Command-Level Settings (VB)

Scott Mitchell tarafındanby Scott Mitchell

Kodu indirin veya PDF 'yi indirinDownload Code or Download PDF

Türü belirtilmiş veri kümesi içindeki TableAdapters otomatik olarak veritabanına bağlanma, komut verme ve sonuçlarıyla bir DataTable doldurma konusunda işlem gerçekleştirir.The TableAdapters within a Typed DataSet automatically take care of connecting to the database, issuing commands, and populating a DataTable with the results. Ancak, bu ayrıntıların kendimize ve bu öğreticide, TableAdapter 'daki veritabanı bağlantısına ve komut düzeyi ayarlarına nasıl erişebileceğinizi öğreniyoruz.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.

GirişIntroduction

Eğitim Serisi boyunca, veri erişim katmanını ve katmanlı mimarimizin iş nesnelerini uygulamak için yazılan veri kümelerini kullandık.Throughout the tutorial series we have used Typed DataSets to implement the Data Access Layer and business objects of our layered architecture. İlk öğreticideanlatıldığı gibi, yazılan veri kümesi verileri veri depoları olarak görev yapar, TableAdapters, temel alınan verileri almak ve değiştirmek üzere veritabanıyla iletişim kurmak için sarmalayıcılar olarak davranır.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. TableAdapters, veritabanıyla çalışma ile ilgili karmaşıklığı kapsüllendirir ve veritabanına bağlanmak, bir komut vermek veya sonuçları bir DataTable dosyasına doldurmak için kod yazmak zorunda kalmaktan kurtarır.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.

Bununla birlikte, TableAdapter derinliklerinde burte ve doğrudan ADO.NET nesneleriyle çalışacak kod yazmak zorunda olduğumuz durumlar vardır.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. Bir işlem öğreticisindeki sarmalama veritabanı değişikliklerine , örneğin, ADO.net işlemlerini başlatma, kaydetme ve geri alma için TableAdapter 'a Yöntemler ekledik.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. Bu yöntemler, TableAdapter s SqlCommand nesnelerine atanan bir iç, el ile oluşturulmuş SqlTransaction nesnesi kullanıyordu.These methods used an internal, manually-created SqlTransaction object that was assigned to the TableAdapter s SqlCommand objects.

Bu öğreticide, TableAdapter 'ta veritabanı bağlantısına ve komut düzeyi ayarlarına nasıl erişeöğreneceksiniz.In this tutorial we will examine how to access the database connection- and command-level settings in the TableAdapter. Özellikle, temel bağlantı dizesine ve komut zaman aşımı ayarlarına erişim sağlayan ProductsTableAdapter işlevsellik ekleyeceğiz.In particular, we will add functionality to the ProductsTableAdapter that enables access to the underlying connection string and command timeout settings.

ADO.NET kullanarak verilerle çalışmaWorking with Data Using ADO.NET

Microsoft .NET Framework, verilerle çalışmak için özel olarak tasarlanmış sınıfların bir plethora içerir.The Microsoft .NET Framework contains a plethora of classes designed specifically to work with data. System.Data ad alanıiçinde bulunan bu sınıflar, ADO.net sınıfları olarak adlandırılır.These classes, found within the System.Data namespace, are referred to as the ADO.NET classes. ADO.NET şemsiye altındaki sınıflardan bazıları belirli bir veri sağlayıcısınabağlıdır.Some of the classes under the ADO.NET umbrella are tied to a particular data provider. Veri sağlayıcısını, ADO.NET sınıfları ve temel alınan veri deposu arasında bilgi akışına izin veren bir iletişim kanalı olarak düşünebilirsiniz.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 ve ODBC gibi Genelleştirilmiş sağlayıcıların yanı sıra belirli bir veritabanı sistemi için özel olarak tasarlanan sağlayıcıları da vardır.There are generalized providers, like OleDb and ODBC, as well as providers that are specially designed for a particular database system. Örneğin, OleDb sağlayıcısı kullanılarak bir Microsoft SQL Server veritabanına bağlanmak mümkün olsa da, SqlClient sağlayıcısı, SQL Server için özel olarak tasarlandığından ve iyileştirildiğinden çok daha etkilidir.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.

Verilere programlı olarak erişirken, aşağıdaki model yaygın olarak kullanılır:When programmatically accessing data, the following pattern is commonly used:

  1. Veritabanıyla bağlantı kurun.Establish a connection to the database.
  2. Bir komut verin.Issue a command.
  3. SELECT sorguları için, sonuçta elde edilen kayıtlarla çalışın.For SELECT queries, work with the resulting records.

Bu adımların her birini gerçekleştirmek için ayrı ADO.NET sınıfları vardır.There are separate ADO.NET classes for performing each of these steps. Örneğin, SqlClient sağlayıcısını kullanarak bir veritabanına bağlanmak için SqlConnection sınıfınıkullanın.To connect to a database using the SqlClient provider, for example, use the SqlConnection class. Veritabanına INSERT, UPDATE, DELETEveya SELECT komutu vermek için SqlCommand sınıfınıkullanın.To issue an INSERT, UPDATE, DELETE, or SELECT command to the database, use the SqlCommand class.

Işlem öğreticisindeki sarmalama veritabanı değişiklikleri dışında, TableAdapters otomatik oluşturulan kod, veritabanına bağlanmak, komut vermek, veri almak ve verileri DataTable 'a doldurmak için gereken işlevleri içerdiğinden, herhangi bir alt düzey ADO.net Code kendimize yazmak zorunda kaldık.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. Ancak, bu alt düzey ayarların özelleştirilmesi için gereken zamanlar olabilir.However, there may be times when we need to customize these low-level settings. Sonraki birkaç adımda, TableAdapters tarafından dahili olarak kullanılan ADO.NET nesnelerine nasıl dokunduğunuzda inceleyeceğiz.Over the next few steps we will examine how to tap into the ADO.NET objects used internally by the TableAdapters.

1. Adım: bağlantı özelliği ile IncelemeStep 1: Examining with the Connection Property

Her TableAdapter sınıfı, veritabanı bağlantı bilgilerini belirten bir Connection özelliğine sahiptir.Each TableAdapter class has a Connection property that specifies database connection information. Bu özellik veri türü ve ConnectionString değeri, TableAdapter Yapılandırma sihirbazında yapılan seçimlere göre belirlenir.This property s data type and ConnectionString value are determined by the selections made in the TableAdapter Configuration wizard. Türü belirtilmiş bir veri kümesine ilk olarak bir TableAdapter eklediğimiz durumlarda bu sihirbaz bize veritabanı kaynağını sorar (bkz. Şekil 1).Recall that when we first add a TableAdapter to a Typed DataSet this wizard asks us for the database source (see Figure 1). Bu ilk adımdaki açılan liste, yapılandırma dosyasında belirtilen veritabanlarını ve Sunucu Gezgini s veri bağlantılarında diğer veritabanlarını içerir.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. Kullanmak istediğimiz veritabanı aşağı açılan listede yoksa, yeni bağlantı düğmesine tıklayıp gerekli bağlantı bilgilerini sağlayarak yeni bir veritabanı bağlantısı belirtilebilir.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.

TableAdapter Yapılandırma sihirbazının Ilk adımını The First Step of the TableAdapter Configuration Wizard

Şekil 1: TableAdapter Yapılandırma sihirbazının ilk adımı (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 1: The First Step of the TableAdapter Configuration Wizard (Click to view full-size image)

TableAdapter for Connection özelliği için kodu incelemeye biraz zaman atalım.Let s take a moment to inspect the code for the TableAdapter s Connection property. Veri erişim katmanı oluşturma öğreticisinde belirtildiği gibi, otomatik olarak oluşturulan TableAdapter kodunu Sınıf Görünümü penceresine gidip, uygun sınıfa giderek ve ardından üye adına çift tıklayarak görüntüleyebiliriz.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.

Görünüm menüsüne gidip Sınıf Görünümü ' i seçerek (veya Ctrl + Shift + C yazarak) Sınıf Görünümü penceresine gidin.Navigate to the Class View window by going to the View menu and choosing Class View (or by typing Ctrl+Shift+C). Sınıf Görünümü penceresinin üst yarısında NorthwindTableAdapters ad alanına gidin ve ProductsTableAdapter sınıfını seçin.From the top half of the Class View window, drill down to the NorthwindTableAdapters namespace and select the ProductsTableAdapter class. Bu işlem, Şekil 2 ' de gösterildiği gibi ProductsTableAdapter s üyelerini Sınıf Görünümü alt yarısında görüntüler.This will display the ProductsTableAdapter s members in the bottom half of the Class View, as shown in Figure 2. Kodunu görmek için Connection özelliğine çift tıklayın.Double-click the Connection property to see its code.

Otomatik olarak oluşturulan kodu görüntülemek için Sınıf Görünümü bağlantı özelliğine çift tıklayın

Şekil 2: otomatik olarak oluşturulan kodu görüntülemek Için sınıf görünümü bağlantı özelliğine çift tıklayınFigure 2: Double-Click the Connection Property in the Class View to View Its Auto-Generated Code

TableAdapter s Connection özelliği ve bağlantıyla ilgili diğer kod aşağıdaki gibidir: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 sınıfı örneği oluşturulduğunda _connection üye değişkeni Nothingeşittir.When the TableAdapter class is instantiated, the member variable _connection is equal to Nothing. Connection özelliğine erişildiğinde, önce _connection üye değişkeninin örneği oluşturulmuş olup olmadığını kontrol eder.When the Connection property is accessed, it first checks to see if the _connection member variable has been instantiated. Bu yoksa InitConnection yöntemi çağrılır, bu, _connection örnekleyen ve ConnectionString özelliğini TableAdapter Yapılandırma Sihirbazı s ilk adımından belirtilen bağlantı dizesi değerine ayarlıyor.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 özelliği bir SqlConnection nesnesine de atanabilir.The Connection property can also be assigned to a SqlConnection object. Bunun yapılması, yeni SqlConnection nesnesini tek bir TableAdapter s SqlCommand nesneleri ile ilişkilendirir.Doing so associates the new SqlConnection object with each of the TableAdapter s SqlCommand objects.

2. Adım: bağlantı düzeyi ayarlarını göstermeStep 2: Exposing Connection-Level Settings

Bağlantı bilgileri TableAdapter içinde kapsüllenmelidir ve uygulama mimarisinde diğer katmanlara erişemez.The connection information should remain encapsulated within the TableAdapter and not be accessible to other layers in the application architecture. Ancak, TableAdapter bağlantı düzeyi bilgilerinin bir sorgu, Kullanıcı veya ASP.NET sayfası için erişilebilir veya özelleştirilebilir olması gerektiğinde senaryolar olabilir.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.

Northwind veri kümesindeki ProductsTableAdapter, TableAdapter tarafından kullanılan bağlantı dizesini okumak veya değiştirmek için Iş mantığı katmanı tarafından kullanılabilecek bir ConnectionString özelliği içerecek şekilde genişletmenize olanak tanır.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

Bağlantı dizesi , kullanılacak sağlayıcı, veritabanının konumu, kimlik doğrulama bilgileri ve veritabanıyla ilgili diğer ayarlar gibi veritabanı bağlantı bilgilerini belirten bir dizedir.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. Çeşitli veri depoları ve sağlayıcılar tarafından kullanılan bağlantı dizesi desenlerinin listesi için bkz. connectionStrings.com.For a list of connection string patterns used by a variety of data stores and providers, see ConnectionStrings.com.

Veri erişim katmanı oluşturma öğreticisinde açıklandığı gibi, yazılan veri kümesinin otomatik olarak oluşturulan sınıfları kısmi sınıfların kullanımı aracılığıyla Genişletilebilir.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. İlk olarak, ~/App_Code/DAL klasörünün altında ConnectionAndCommandSettings adlı projede yeni bir alt klasör oluşturun.First, create a new subfolder in the project named ConnectionAndCommandSettings underneath the ~/App_Code/DAL folder.

ConnectionAndCommandSettings adında bir alt klasör ekleyin

Şekil 3: ConnectionAndCommandSettings adlı bir alt klasör eklemeFigure 3: Add a Subfolder Named ConnectionAndCommandSettings

ProductsTableAdapter.ConnectionAndCommandSettings.vb adlı yeni bir sınıf dosyası ekleyin ve aşağıdaki kodu girin: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

Bu kısmi sınıf ProductsTableAdapter sınıfına ConnectionString adlı Public özelliği ekler. Bu, herhangi bir katmanın, ilişkili olan bağlantı dizesini okumasına veya güncelleştirmesine izin verir.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.

Bu kısmi sınıf oluşturulur (ve kaydedildiğinde), ProductsBLL sınıfını açın.With this partial class created (and saved), open the ProductsBLL class. Mevcut yöntemlerden birine gidin ve Adapter yazın ve ardından IntelliSense 'i getirmek için period tuşuna basın.Go to one of the existing methods and type in Adapter and then hit the period key to bring up IntelliSense. IntelliSense 'de yeni ConnectionString özelliğini görmeniz gerekir, yani bu değeri BLL 'den programlama yoluyla okuyabilmeniz veya ayarlayabilmelisiniz.You should see the new ConnectionString property available in IntelliSense, meaning that you can programmatically read or adjust this value from the BLL.

Tüm bağlantı nesnesi gösteriliyorExposing the Entire Connection Object

Bu kısmi sınıf, temel alınan bağlantı nesnesinin yalnızca bir özelliğini kullanıma sunar: ConnectionString.This partial class exposes just one property of the underlying connection object: ConnectionString. Tüm bağlantı nesnesini TableAdapter 'ın sınırlarının ötesinde kullanılabilir hale getirmek istiyorsanız, Connection özellik s koruma düzeyini değiştirebilirsiniz.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. Adım 1 ' de incelenen otomatik oluşturulan kod, TableAdapter s Connection özelliğinin Friendolarak işaretlendiğinden, yani yalnızca aynı derlemede bulunan sınıflar tarafından erişilebileceği anlamına geliyor.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. Bununla birlikte, TableAdapter s ConnectionModifier özelliği aracılığıyla bu değiştirilebilir.This can be changed, however, via the TableAdapter s ConnectionModifier property.

Northwind veri kümesini açın, tasarımcıda ProductsTableAdapter tıklayın ve Özellikler penceresi gidin.Open the Northwind DataSet, click on the ProductsTableAdapter in the Designer, and navigate to the Properties window. ConnectionModifier, Assemblyvarsayılan değerine ayarlandığını görürsünüz.There you will see the ConnectionModifier set to its default value, Assembly. Connection özelliğini, türü belirtilmiş DataSet s derlemesinin dışında kullanılabilir hale getirmek için, ConnectionModifier özelliğini Publicolarak değiştirin.To make the Connection property available outside of the Typed DataSet s assembly, change the ConnectionModifier property to Public.

Bağlantı özelliği s erişilebilirlik düzeyi ConnectionModifier özelliği aracılığıyla yapılandırılabilirThe Connection Property s Accessibility Level Can Be Configured via the ConnectionModifier Property

Şekil 4: Connection Property s erişilebilirlik düzeyi ConnectionModifier özelliği aracılığıyla yapılandırılabilir (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 4: The Connection Property s Accessibility Level Can Be Configured via the ConnectionModifier Property (Click to view full-size image)

Veri kümesini kaydedin ve sonra ProductsBLL sınıfına geri dönün.Save the DataSet and then return to the ProductsBLL class. Daha önce olduğu gibi, mevcut yöntemlerden birine gidin ve Adapter yazın ve ardından IntelliSense 'i getirmek için period tuşuna basın.As before, go to one of the existing methods and type in Adapter and then hit the period key to bring up IntelliSense. Liste, artık BLL 'den herhangi bir bağlantı düzeyindeki ayarı program aracılığıyla okuyabilmeniz veya atayabilmeniz için bir Connection özelliği içermelidir.The list should include a Connection property, meaning that you can now programmatically read or assign any connection-level settings from the BLL.

TableAdapter, varsayılan olarak otomatik olarak oluşturulan INSERT, UPDATEve DELETE deyimlerini içeren bir ana sorgudan oluşur.A TableAdapter consists of a main query that, by default, has auto-generated INSERT, UPDATE, and DELETE statements. Bu ana sorgu s INSERT, UPDATEve DELETE deyimleri, Adapter özelliği aracılığıyla TableAdapter s kodunda bir ADO.NET veri bağdaştırıcısı nesnesi olarak uygulanır.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 özelliği ile benzer şekilde, Adapter özellik s veri türü kullanılan veri sağlayıcısı tarafından belirlenir.Like with its Connection property, the Adapter property s data type is determined by the data provider used. Bu öğreticiler SqlClient sağlayıcısını kullandığından Adapter özelliği SqlDataAdaptertüründedir.Since these tutorials use the SqlClient provider, the Adapter property is of type SqlDataAdapter.

TableAdapter s Adapter özelliği, SqlCommand türünde INSERT, UPDATEve DELETE deyimlerini vermek için kullandığı üç özelliğe sahiptir: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 nesnesi, veritabanına belirli bir sorgu göndermekten sorumludur ve şu şekilde özelliklere sahiptir: CommandText, örneğin, geçici SQL ifadesini veya yürütülecek saklı yordamı içeren. ve bir SqlParameter nesneleri koleksiyonu olan Parameters.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. Veri erişim katmanı oluşturma öğreticisinde geri döndüğünüzde, bu komut nesneleri Özellikler penceresi aracılığıyla özelleştirilebilir.As we saw back in the Creating a Data Access Layer tutorial, these command objects can be customized through the Properties window.

TableAdapter, ana sorgusuna ek olarak, çağrıldığında, belirtilen bir komutu veritabanına gönderse, bir değişken sayıda yöntem içerebilir.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. Ana sorgu s komut nesnesi ve tüm ek yöntemler için komut nesneleri TableAdapter s CommandCollection özelliğinde depolanır.The main query s command object and the command objects for all additional methods are stored in the TableAdapter s CommandCollection property.

Bu iki özellik ve destekleyici üye değişkenleri ve yardımcı yöntemleri için Northwind veri kümesindeki ProductsTableAdapter tarafından oluşturulan koda bakmak için bir süre bekleyin: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 ve CommandCollection özelliklerinin kodu Connection özelliğini yakından taklit eder.The code for the Adapter and CommandCollection properties closely mimics that of the Connection property. Özellikler tarafından kullanılan nesneleri tutan üye değişkenleri vardır.There are member variables that hold the objects used by the properties. Özellikler Get erişimcileri, ilgili üye değişkeninin Nothingolup olmadığını denetleyerek başlar.The properties Get accessors start by checking to see if the corresponding member variable is Nothing. Bu durumda, üye değişkeninin bir örneğini oluşturan ve komutla ilgili temel özellikleri atayan bir başlatma yöntemi çağırılır.If so, an initialization method is called which creates an instance of the member variable and assigns the core command-related properties.

4. Adım: komut düzeyi ayarları göstermeStep 4: Exposing Command-Level Settings

İdeal olarak, komut düzeyi bilgileri veri erişim katmanında kapsüllenmelidir.Ideally, the command-level information should remain encapsulated within the Data Access Layer. Bu bilgilerin mimarinin diğer katmanlarında olması gerekir, ancak tıpkı bağlantı düzeyi ayarları gibi kısmi bir sınıf aracılığıyla sunulabilir.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 yalnızca tek bir Connection özelliğine sahip olduğundan, bağlantı düzeyi ayarlarını gösterme kodu oldukça basittir.Since the TableAdapter only has a single Connection property, the code for exposing connection-level settings is fairly straightforward. TableAdapter, bir InsertCommand, UpdateCommandve DeleteCommand, CommandCollection özelliğindeki çeşitli komut nesneleriyle birlikte birden çok komut nesnesine sahip olabileceğinden, komut düzeyi ayarları değiştirirken bu işlemler biraz daha karmaşıktır.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. Komut düzeyi ayarları güncelleştirilirken, bu ayarların tüm komut nesnelerine yayılmalıdır.When updating command-level settings, these settings will need to be propagated to all of the command objects.

Örneğin, TableAdapter 'ta yürütülmesi için olağandışı uzun süre geçen belirli sorgular olduğunu düşünün.For example, imagine that there were certain queries in the TableAdapter that took an extraordinary long time to execute. Bu sorgulardan birini yürütmek için TableAdapter kullanılırken, komut nesne s CommandTimeout özelliğiniartırmak isteyebilirsiniz.When using the TableAdapter to execute one of those queries, we might want to increase the command object s CommandTimeout property. Bu özellik, komutun yürütülmesi için bekleyeceği saniye sayısını ve varsayılan olarak 30 değerini belirtir.This property specifies the number of seconds to wait for the command to execute and defaults to 30.

CommandTimeout özelliğinin BLL tarafından ayarlanmasına izin vermek için, adım 2 ' de oluşturulan kısmi sınıf dosyasını kullanarak ProductsDataTable aşağıdaki Public yöntemini ekleyin (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

Bu yöntem, Bu TableAdapter örneği tarafından tüm komut sorunları için komut zaman aşımını ayarlamak üzere BLL veya Presentation katmanından çağrılabilir.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 ve CommandCollection özellikleri Privateolarak işaretlenir, yani yalnızca TableAdapter içindeki koddan erişilebilir.The Adapter and CommandCollection properties are marked as Private, meaning they can only be accessed from code within the TableAdapter. Connection özelliğinden farklı olarak, bu erişim değiştiricileri yapılandırılamaz.Unlike the Connection property, these access modifiers are not configurable. Bu nedenle, komut düzeyi özellikleri mimarideki diğer katmanlara kullanıma sunmaya ihtiyacınız varsa, Private komut nesnelerini okuyan veya yazan bir Public metodu veya özelliği sağlamak için yukarıda açıklanan kısmi sınıf yaklaşımını kullanmanız gerekir.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.

ÖzetSummary

Türü belirtilmiş veri kümesi içindeki TableAdapters veri erişimi ayrıntılarını ve karmaşıklığını kapsüllemek için işlev yapar.The TableAdapters within a Typed DataSet serve to encapsulate data access details and complexity. TableAdapters kullanarak, veritabanına bağlanmak, bir komut vermek veya sonuçları bir DataTable dosyasına doldurmak için ADO.NET kodu yazma konusunda endişelenmenize gerek yoktur.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. Hepsi sizin için otomatik olarak işlenir.It is all handled automatically for us.

Ancak, bağlantı dizesini veya varsayılan bağlantıyı veya komut zaman aşımı değerlerini değiştirme gibi alt düzey ADO.NET özelliklerini özelleştirmek için gereken durumlar olabilir.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 otomatik olarak oluşturulan Connection, Adapterve CommandCollection özelliklerine sahiptir, ancak bunlar varsayılan olarak Friend veya Private.The TableAdapter has auto-generated Connection, Adapter, and CommandCollection properties, but these are either Friend or Private, by default. Bu iç bilgiler, Public Yöntemler veya özellikler dahil olmak üzere kısmi sınıflar kullanılarak TableAdapter genişleterek ortaya çıkabilir.This internal information can be exposed by extending the TableAdapter using partial classes to include Public methods or properties. Alternatif olarak, TableAdapter s Connection özellik erişim değiştiricisi TableAdapter s ConnectionModifier özelliği aracılığıyla yapılandırılabilir.Alternatively, the TableAdapter s Connection property access modifier can be configured through the TableAdapter s ConnectionModifier property.

Programlamanın kutlu olsun!Happy Programming!

Yazar hakkındaAbout the Author

4GuysFromRolla.com 'in, Scott Mitchell, yedi ASP/ASP. net books ve 'in yazarı, 1998 sürümünden bu yana Microsoft Web teknolojileriyle çalışmaktadır.Scott Mitchell, author of seven ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott bağımsız danışman, Trainer ve yazıcı olarak çalışıyor.Scott works as an independent consultant, trainer, and writer. En son kitabı, 24 saat içinde ASP.NET 2,0 kendi kendinize eğitimister.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. mitchell@4GuysFromRolla.comadresinden erişilebilir .He can be reached at mitchell@4GuysFromRolla.com. ya da blog aracılığıyla http://ScottOnWriting.NETbulabilirsiniz.or via his blog, which can be found at http://ScottOnWriting.NET.

Özel olarak teşekkürlerSpecial Thanks To

Bu öğretici serisi birçok yararlı gözden geçirenler tarafından incelendi.This tutorial series was reviewed by many helpful reviewers. Bu öğreticide lider gözden geçirenler Burnadette Leigh, S Ren Jacob Lauritsen, Teresa Murphy ve Tepton Geisenow.Lead reviewers for this tutorial were Burnadette Leigh, S ren Jacob Lauritsen, Teresa Murphy, and Hilton Geisenow. Yaklaşan MSDN makalelerimi gözden geçiriyor musunuz?Interested in reviewing my upcoming MSDN articles? Öyleyse, benimitchell@4GuysFromRolla.combir satır bırakın .If so, drop me a line at mitchell@4GuysFromRolla.com.