Aracılığıyla paylaş


DataAdapter Parametreleri

, DbDataAdapter veri kaynağından veri almak ve verileri veri kaynağına güncelleştirmek için kullanılan dört özelliğe sahiptir: SelectCommand özelliği veri kaynağından veri döndürür; ve InsertCommand veri kaynağındaki değişiklikleri yönetmek için , UpdateCommandve DeleteCommand özellikleri kullanılır. SelectCommand özelliği, Fill yöntemini DataAdapter çağırmadan önce ayarlanmalıdır. InsertCommand, UpdateCommand veya DeleteCommand özellikleri, Update yönteminin çağrılmasından önce, DataTable içindeki verilere yapılan değişikliklere bağlı olarak ayarlanmalıdır. Örneğin, satırlar eklenmişse, InsertCommand öğesi ayarlanmalı ve ardından Update çağrılmalıdır. Eklenen, güncelleştirilen veya silinen bir satırı işlerken Update , DataAdapter eylemi işlemek için ilgili Command özelliği kullanır. Koleksiyon aracılığıyla değiştirilen satır hakkındaki geçerli bilgiler Command nesnesine Parameters geçirilir.

Veri kaynağında bir satırı güncelleştirdiğinizde, güncelleştirilecek tablodaki satırı tanımlamak için benzersiz bir tanımlayıcı kullanan UPDATE deyimini çağırırsınız. Benzersiz tanımlayıcı genellikle birincil anahtar alanının değeridir. UPDATE deyimi, aşağıdaki Transact-SQL deyiminde gösterildiği gibi hem benzersiz tanımlayıcıyı hem de güncelleştirilecek sütunları ve değerleri içeren parametreleri kullanır.

UPDATE Customers SET CompanyName = @CompanyName
  WHERE CustomerID = @CustomerID

Not

Parametre yer tutucularının söz dizimi veri kaynağına bağlıdır. Bu örnekte SQL Server veri kaynağı için yer tutucular gösterilmektedir. System.Data.OleDb ve System.Data.Odbc parametreleri için soru işareti (?) yer tutucuları kullanın.

Bu Visual Basic örneğinde, CompanyName alanı, @CustomerID parametresinin değerine eşit olan satırdaki @CompanyName parametresinin değeriyle güncellenir. Parametreler, SqlParameter nesnesinin SourceColumn özelliğini kullanarak değiştirilen satırdan bilgi alır. Önceki örnek UPDATE deyiminin parametreleri aşağıda verilmiştir. Kod, değişkeninin adapter geçerli SqlDataAdapter bir nesneyi temsil ettiğini varsayar.

adapter.Parameters.Add( _
  "@CompanyName", SqlDbType.NChar, 15, "CompanyName")
Dim parameter As SqlParameter = _
  adapter.UpdateCommand.Parameters.Add("@CustomerID", _
  SqlDbType.NChar, 5, "CustomerID")
parameter.SourceVersion = DataRowVersion.Original

Add koleksiyonun Parameters yöntemi, parametre adını, veri türünü, varsa türü için boyutunu ve DataTable öğesinden SourceColumn adını alır. SourceVersion parametresinin @CustomerID olarak ayarlandığına Originaldikkat edin. Eğer değiştirilmiş DataRow içinde tanımlayıcı sütunun veya sütunların değeri değiştirilmişse, veri kaynağındaki mevcut satırın güncellenmesini garanti eder. Bu durumda, Original satır değeri veri kaynağındaki geçerli değerle eşleşir ve Current satır değeri güncelleştirilmiş değeri içerir. SourceVersion @CompanyName parametresi ayarlanmadı ve varsayılan Current satır değerini kullanır.

Not

tr-TR: Hem Fill işlemleri DataAdapter hem de Get yöntemleri DataReader için, .NET Framework türü, .NET Framework veri sağlayıcısından döndürülen türden çıkarılır. Microsoft SQL Server, OLE DB ve ODBC veri türleri için çıkarsanan .NET Framework türleri ve erişimci yöntemleri ADO.NET'deki Veri Türü Eşlemeleri'nde açıklanmıştır.

Parameter.SourceColumn, Parameter.SourceVersion

SourceColumn ve SourceVersion, Parameter oluşturucuya bağımsız değişken olarak geçirilebilir veya mevcut bir Parameter öğesinin özellikleri olarak ayarlanabilir. SourceColumn, DataColumn öğesinin Parameter değerinin alınacağı DataRow konumunun adıdır. SourceVersion değeri almak için DataAdapter tarafından kullanılan DataRow sürümünü belirtir.

Aşağıdaki tabloda DataRowVersion ile kullanılabilen enum değerleri SourceVersion gösterilmektedir.

DataRowVersion Numaralandırması Açıklama
Current parametresi sütunun geçerli değerini kullanır. Bu varsayılan seçenektir.
Default Parametre, sütunun DefaultValue öğesini kullanır.
Original parametresi sütunun özgün değerini kullanır.
Proposed parametresi önerilen bir değer kullanır.

SqlClient Sonraki bölümdeki kod örneği, CustomerID sütununun iki parametre için SourceColumn olarak kullanıldığı bir UpdateCommand için bir parametre tanımlar: @CustomerID (SET CustomerID = @CustomerID) ve @OldCustomerID (WHERE CustomerID = @OldCustomerID). @CustomerID parametresi, CustomerID sütununu DataRow içindeki geçerli değere güncelleştirmek için kullanılır. Sonuç olarak, CustomerIDSourceColumn ile SourceVersionCurrent kullanılır. @OldCustomerID parametresi, veri kaynağındaki geçerli satırı tanımlamak için kullanılır. Satırın Original versiyonunda eşleşen sütun değeri bulunduğundan, aynı SourceColumn (CustomerID) OriginalSourceVersion kullanılır.

SqlClient Parametreleriyle Çalışma

Aşağıdaki örnek, veritabanından ek şema bilgilerini almak için bir SqlDataAdapter nasıl oluşturulacağını ve MissingSchemaActionAddWithKey olarak nasıl ayarlanacağını göstermektedir. SelectCommand, InsertCommand, UpdateCommand ve DeleteCommand özellikleri ayarlanarak bunlara karşılık gelen SqlParameter nesneleri Parameters koleksiyonuna eklendi. yöntemi bir SqlDataAdapter nesne döndürür.

public static SqlDataAdapter CreateSqlDataAdapter(SqlConnection connection)
{
    SqlDataAdapter adapter = new()
    {
        MissingSchemaAction = MissingSchemaAction.AddWithKey,

        // Create the commands.
        SelectCommand = new SqlCommand(
        "SELECT CustomerID, CompanyName FROM CUSTOMERS", connection),
        InsertCommand = new SqlCommand(
        "INSERT INTO Customers (CustomerID, CompanyName) " +
        "VALUES (@CustomerID, @CompanyName)", connection),
        UpdateCommand = new SqlCommand(
        "UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
        "WHERE CustomerID = @oldCustomerID", connection),
        DeleteCommand = new SqlCommand(
        "DELETE FROM Customers WHERE CustomerID = @CustomerID", connection)
    };

    // Create the parameters.
    adapter.InsertCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID");
    adapter.InsertCommand.Parameters.Add("@CompanyName",
        SqlDbType.VarChar, 40, "CompanyName");

    adapter.UpdateCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID");
    adapter.UpdateCommand.Parameters.Add("@CompanyName",
        SqlDbType.VarChar, 40, "CompanyName");
    adapter.UpdateCommand.Parameters.Add("@oldCustomerID",
        SqlDbType.Char, 5, "CustomerID").SourceVersion =
        DataRowVersion.Original;

    adapter.DeleteCommand.Parameters.Add("@CustomerID",
        SqlDbType.Char, 5, "CustomerID").SourceVersion =
        DataRowVersion.Original;

    return adapter;
}
Public Function CreateSqlDataAdapter( _
    ByVal connection As SqlConnection) As SqlDataAdapter

    Dim adapter As New SqlDataAdapter()
    adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey

    ' Create the commands.
    adapter.SelectCommand = New SqlCommand( _
        "SELECT CustomerID, CompanyName FROM CUSTOMERS", connection)
    adapter.InsertCommand = New SqlCommand( _
        "INSERT INTO Customers (CustomerID, CompanyName) " & _
         "VALUES (@CustomerID, @CompanyName)", connection)
    adapter.UpdateCommand = New SqlCommand( _
        "UPDATE Customers SET CustomerID = @CustomerID, CompanyName = " & _
        "@CompanyName WHERE CustomerID = @oldCustomerID", connection)
    adapter.DeleteCommand = New SqlCommand( _
        "DELETE FROM Customers WHERE CustomerID = @CustomerID", connection)

    ' Create the parameters.
    adapter.InsertCommand.Parameters.Add("@CustomerID", _
        SqlDbType.Char, 5, "CustomerID")
    adapter.InsertCommand.Parameters.Add("@CompanyName", _
        SqlDbType.VarChar, 40, "CompanyName")

    adapter.UpdateCommand.Parameters.Add("@CustomerID", _
        SqlDbType.Char, 5, "CustomerID")
    adapter.UpdateCommand.Parameters.Add("@CompanyName", _
        SqlDbType.VarChar, 40, "CompanyName")
    adapter.UpdateCommand.Parameters.Add("@oldCustomerID", _
        SqlDbType.Char, 5, "CustomerID").SourceVersion = _
        DataRowVersion.Original

    adapter.DeleteCommand.Parameters.Add("@CustomerID", _
        SqlDbType.Char, 5, "CustomerID").SourceVersion = _
        DataRowVersion.Original

    Return adapter
End Function

OleDb Parametre Yer Tutucuları

OleDbDataAdapter ve OdbcDataAdapter nesneleri için, parametreleri tanımlamak için soru işareti (?) yer tutucularını kullanmanız gerekir.

Dim selectSQL As String = _
  "SELECT CustomerID, CompanyName FROM Customers " & _
  "WHERE CountryRegion = ? AND City = ?"
Dim insertSQL AS String = _
  "INSERT INTO Customers (CustomerID, CompanyName) VALUES (?, ?)"
Dim updateSQL AS String = _
  "UPDATE Customers SET CustomerID = ?, CompanyName = ? " & _
  WHERE CustomerID = ?"
Dim deleteSQL As String = "DELETE FROM Customers WHERE CustomerID = ?"
string selectSQL =
  "SELECT CustomerID, CompanyName FROM Customers " +
  "WHERE CountryRegion = ? AND City = ?";
string insertSQL =
  "INSERT INTO Customers (CustomerID, CompanyName) " +
  "VALUES (?, ?)";
string updateSQL =
  "UPDATE Customers SET CustomerID = ?, CompanyName = ? " +
  "WHERE CustomerID = ? ";
string deleteSQL = "DELETE FROM Customers WHERE CustomerID = ?";

Parametreli sorgu deyimleri, hangi giriş ve çıkış parametrelerinin oluşturulması gerektiğini tanımlar. Parametre oluşturmak için yöntemini veya oluşturucuyu Parameters.Add kullanarak Parameter sütun adını, veri türünü ve boyutunu belirtin. gibi Integeriç veri türleri için boyutu eklemeniz gerekmez veya varsayılan boyutu belirtebilirsiniz.

Aşağıdaki kod örneği, bir SQL deyiminin parametrelerini oluşturur ve sonra bir DataSetdoldurur.

OleDb Örneği

' Assumes that connection is a valid OleDbConnection object.
Dim adapter As OleDbDataAdapter = New OleDbDataAdapter

Dim selectCMD AS OleDbCommand = New OleDbCommand(selectSQL, connection)
adapter.SelectCommand = selectCMD

' Add parameters and set values.
selectCMD.Parameters.Add( _
  "@CountryRegion", OleDbType.VarChar, 15).Value = "UK"
selectCMD.Parameters.Add( _
  "@City", OleDbType.VarChar, 15).Value = "London"

Dim customers As DataSet = New DataSet
adapter.Fill(customers, "Customers")
// Assumes that connection is a valid OleDbConnection object.
OleDbDataAdapter adapter = new OleDbDataAdapter();

OleDbCommand selectCMD = new OleDbCommand(selectSQL, connection);
adapter.SelectCommand = selectCMD;

// Add parameters and set values.
selectCMD.Parameters.Add(
  "@CountryRegion", OleDbType.VarChar, 15).Value = "UK";
selectCMD.Parameters.Add(
  "@City", OleDbType.VarChar, 15).Value = "London";

DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");

Odbc Parametreleri

' Assumes that connection is a valid OdbcConnection object.
Dim adapter As OdbcDataAdapter = New OdbcDataAdapter

Dim selectCMD AS OdbcCommand = New OdbcCommand(selectSQL, connection)
adapter.SelectCommand = selectCMD

' Add Parameters and set values.
selectCMD.Parameters.Add("@CountryRegion", OdbcType.VarChar, 15).Value = "UK"
selectCMD.Parameters.Add("@City", OdbcType.VarChar, 15).Value = "London"

Dim customers As DataSet = New DataSet
adapter.Fill(customers, "Customers")
// Assumes that connection is a valid OdbcConnection object.
OdbcDataAdapter adapter = new OdbcDataAdapter();

OdbcCommand selectCMD = new OdbcCommand(selectSQL, connection);
adapter.SelectCommand = selectCMD;

//Add Parameters and set values.
selectCMD.Parameters.Add("@CountryRegion", OdbcType.VarChar, 15).Value = "UK";
selectCMD.Parameters.Add("@City", OdbcType.VarChar, 15).Value = "London";

DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");

Not

Bir parametre için parametre adı sağlanmazsa, parametreye "Parametre1" ile başlayarak N Parametresininartımlı varsayılan adı verilir. Bir parametre adı sağladığınızda ParametreN adlandırma kuralından kaçınmanızı öneririz, çünkü sağladığınız ad içinde ParameterCollectionmevcut bir varsayılan parametre adıyla çakışabilir. Sağlanan ad zaten mevcutsa, bir istisna oluşturulur.

Ayrıca bkz.