Makale Özeti

SqlCommandBuilder ve OleDbCommandBuilder sınıflarına ait DeriveParameters() isimli shared metot kullanılarak, stored procedure ‘lere parametre değişkenlerini kopyalamayı sağlayan parameters kolleksiyonu otomatik olarak oluşturulabilir. DeriveParameters() metodu; söz konusu komutu temsil eden Command nesnesini parametre olarak alır...

Makale

SqlCommandBuilder ve OleDbCommandBuilder sınıflarına ait DeriveParameters() isimli shared metot kullanılarak, stored procedure ‘lere parametre değişkenlerini kopyalamayı sağlayan parameters kolleksiyonu otomatik olarak oluşturulabilir. DeriveParameters() metodu; söz konusu komutu temsil eden Command nesnesini parametre olarak alır. Prototipi ;

Public Shared Sub DeriveParameters(ByVal command as SqlCommand)
Public Shared Sub DeriveParameters(ByVal command as OleDbCommand)

DeriveParameters() metodu çağrıldığında; referanse edilen stored procedure ‘e ait parametre bilgilerini (metadata) elde etmek üzere, SQL Server ‘a başvurur (round trip). Fonksiyon elde ettiği bilgilere göre, Parameters kolleksiyonunu otomatik olarak oluşturur.

NOT : DeriveParameters() metodu, çalışma tarzı bakımından ADO ‘daki Parameters kolleksiyonuna ait Refresh() isimli metod ile benzeşmektedir.

Örnek : Aşağıdaki uygulamada pubs veri tabanına ait, titles tablosundaki, type alanındaki değeri “Business” olan yayınların, fiyatını iki katına çıkartan, UpdatePrice isimli stored procedure kullanılmıştır.

CREATE PROCEDURE UpdatePrice
@type char(30)
AS
Update titles SET price = price * 2
WHERE type = @type

Uygulama tarafında ise; parameters kolleksiyonu manuel olarak değil, DeriveParameters() metodu ile otomatik olarak oluşturulmuştur.

Imports System.Data.SqlClient

Module Module1

  Public Sub Main()

     Dim oCnn As New SqlConnection()

     oCnn.ConnectionString = "data source=localhost; database=pubs;integrated security=True"

     oCnn.Open()

     Dim oCmd As New SqlCommand()

     With oCmd

         .Connection = oCnn

         .CommandType = CommandType.StoredProcedure

         .CommandText = "UpdatePrice"

      End With

      SqlCommandBuilder.DeriveParameters(oCmd)

      oCmd.Parameters("@type").Value = "Business"

      oCmd.ExecuteNonQuery()

      oCnn.Close()

End Sub

End Module

Özet :

Örneği dikkatle incelerseniz, oCmd nesnesine ait Parameters kolleksiyonunun, manuel olarak oluşturulmamış olduğunu görürsünüz. Örneğin @type parametre değişkenini temsil eden bir SqlParameter nesnesi (explicit olarak) yaratılmamış olmasına rağmen, Parameters kolleksiyonunundaki “@type” isimli elemana, Value property ‘si kullanılarak, değer ataması yapılabilmiştir.

Aykut TAŞDELEN

aykuttasdelen@yazgelistir.com