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. özelliğinin SelectCommand yöntemini DataAdapterçağırmadan Fill önce ayarlanması gerekir. InsertCommandyöntemi çağrılmadan önce UpdateDataAdapter içindeki UpdateCommandverilerde DataTableyapılan değişikliklere bağlı olarak , veya DeleteCommand özellikleri ayarlanmalıdır. Örneğin, satırlar eklendiyse, InsertCommand çağrısı Updateyapılmadan önce öğesinin ayarlanması gerekir. Eklenen, güncelleştirilen veya silinen bir satırı işlerken Update , DataAdapter eylemi işlemek için ilgili Command özelliği kullanır. Değiştirilen satır hakkındaki geçerli bilgiler koleksiyon aracılığıyla Parameters nesneye Command 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. ve System.Data.Odbc parametreleri için System.Data.OleDb soru işareti (?) yer tutucularını kullanın.

Bu Visual Basic örneğinde CompanyName alan, parametrenin değerine @CompanyName eşit olan CustomerID satırın parametresinin @CustomerID değeriyle güncelleştirilir. Parametreler, nesnesinin özelliğini SqlParameter kullanarak SourceColumn 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 parametresinin adını, veri türünü, boyutunu (türü için varsa) ve öğesinden DataTableöğesinin SourceColumn adını alır. SourceVersion parametresinin @CustomerID olarak ayarlandığına Originaldikkat edin. Bu, değiştirilen içinde tanımlayıcı sütun veya sütunların değeri değiştirildiğinde veri kaynağındaki mevcut satırın güncelleştirildiğini garanti eder DataRow. 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

hem Get işlemlerinin DataAdapter hem de Fill yöntemlerinin DataReader.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 oluşturucuya Parameter bağımsız değişken olarak geçirilebilir veya mevcut Parameterbir öğesinin özellikleri olarak ayarlanabilir. SourceColumn değerinin DataRowDataColumn alınacağı konumdan öğesinin Parameter adıdır. değeri SourceVersion almak için kullanılan sürümü DataAdapter belirtirDataRow.

Aşağıdaki tabloda ile SourceVersionkullanılabilen numaralandırma değerleri gösterilmektedirDataRowVersion.

DataRowVersion Numaralandırması Açıklama
Current parametresi sütunun geçerli değerini kullanır. Bu varsayılan seçenektir.
Default parametresi sütunun öğesini DefaultValue 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, sütunun CustomerID iki parametre için kullanıldığı SourceColumn bir UpdateCommand parametresini tanımlar: @CustomerID (SET CustomerID = @CustomerID) ve @OldCustomerID (WHERE CustomerID = @OldCustomerID). @CustomerID parametresi CustomerID sütununu içindeki DataRowgeç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. Eşleşen sütun değeri satırın sürümünde bulunduğundan Original , ile aynı SourceColumn (CustomerID) SourceVersionOriginal kullanılır.

SqlClient Parametreleriyle Çalışma

Aşağıdaki örnekte, veritabanından ek şema bilgilerini almak için öğesinin SqlDataAdapter nasıl oluşturulacağı ve olarak nasıl ayarlanacağı MissingSchemaActionAddWithKey gösterilmektedir. SelectCommand, InsertCommand, UpdateCommandve DeleteCommand özellikleri kümesi ve koleksiyona Parameters eklenen ilgili SqlParameter nesneleri. 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 Parameter kullanarak Parameters.Add 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 ParametreN artı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 varsa, bir özel durum oluşturulur.

Ayrıca bkz.