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. InsertCommand
yöntemi çağrılmadan önce Update
DataAdapter
içindeki UpdateCommand
verilerde DataTableyapılan değişikliklere bağlı olarak , veya DeleteCommand
özellikleri ayarlanmalıdır. Örneğin, satırlar eklendiyse, InsertCommand
çağrısı Update
yapı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 Original
dikkat 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 Parameter
bir öğesinin özellikleri olarak ayarlanabilir. SourceColumn
değerinin DataRow DataColumn 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 SourceVersion
kullanı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 DataRow
geçerli değere güncelleştirmek için kullanılır. Sonuç olarak, CustomerID
SourceColumn
ile SourceVersion
Current
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
) SourceVersion
Original
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ğı MissingSchemaAction AddWithKey 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 Integer
iç 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 DataSet
doldurur.
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 ParameterCollection
mevcut bir varsayılan parametre adıyla çakışabilir. Sağlanan ad zaten varsa, bir özel durum oluşturulur.