Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
, 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.