DbDataAdapter ile Verileri Değiştirme
CreateDataAdapter bir DbProviderFactory nesnenin yöntemi, fabrikayı oluşturduğunuz sırada belirtilen temel veri sağlayıcısına kesin olarak yazılan bir DbDataAdapter nesne verir. Ardından, bir DbCommandBuilder veri kaynağından veri eklemek, güncelleştirmek ve silmek için komutlar oluşturmak için kullanabilirsiniz DataSet .
DbDataAdapter ile Veri Alma
Bu örnekte, sağlayıcı adı ve bağlantı dizesi temelinde kesin olarak yazılan DbDataAdapter
bir oluşturma gösterilmektedir. Kod, oluşturmak DbConnectioniçin yöntemini DbProviderFactory kullanırCreateConnection. Ardından kod, ve özelliklerini ayarlayarak CommandText
veri seçmek için bir DbCommand oluşturmak için yöntemini kullanırCreateCommand.Connection
Son olarak, kod yöntemini kullanarak CreateDataAdapter bir DbDataAdapter nesnesi oluşturur ve özelliğini SelectCommand
ayarlar. Fill
yöntemiDbDataAdapter
, verileri içine DataTableyükler.
static void CreateDataAdapter(string providerName, string connectionString)
{
try
{
// Create the DbProviderFactory and DbConnection.
DbProviderFactory factory =
DbProviderFactories.GetFactory(providerName);
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
using (connection)
{
// Define the query.
const string queryString =
"SELECT CategoryName FROM Categories";
// Create the DbCommand.
DbCommand command = factory.CreateCommand();
command.CommandText = queryString;
command.Connection = connection;
// Create the DbDataAdapter.
DbDataAdapter adapter = factory.CreateDataAdapter();
adapter.SelectCommand = command;
// Fill the DataTable.
DataTable table = new();
adapter.Fill(table);
// Display each row and column value.
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
Console.WriteLine(row[column]);
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Shared Sub CreateDataAdapter(ByVal providerName As String, _
ByVal connectionString As String)
' Create the DbProviderFactory and DbConnection.
Try
Dim factory As DbProviderFactory = _
DbProviderFactories.GetFactory(providerName)
Dim connection As DbConnection = _
factory.CreateConnection()
connection.ConnectionString = connectionString
Using connection
' Define the query.
Dim queryString As String = _
"SELECT CategoryName FROM Categories"
'Create the DbCommand.
Dim command As DbCommand = _
factory.CreateCommand()
command.CommandText = queryString
command.Connection = connection
' Create the DbDataAdapter.
Dim adapter As DbDataAdapter = _
factory.CreateDataAdapter()
adapter.SelectCommand = command
' Fill the DataTable
Dim table As New DataTable
adapter.Fill(table)
'Display each row and column value.
Dim row As DataRow
Dim column As DataColumn
For Each row In table.Rows
For Each column In table.Columns
Console.WriteLine(row(column))
Next
Next
End Using
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
DbDataAdapter ile Verileri Değiştirme
Bu örnekte, veri kaynağındaki DataTable
DbDataAdapter verileri güncelleştirmek için gerekli komutları oluşturmak için kullanarak kullanarak DbCommandBuilder bir içindeki verilerin nasıl değiştirileceği gösterilmektedir. SelectCommand öğesinin DbDataAdapter
değeri, Müşteriler tablosundan CustomerID ve CompanyName bilgilerini alacak şekilde ayarlanır. GetInsertCommand yöntemi özelliğini ayarlamak InsertCommand için kullanılır, GetUpdateCommand özelliği ayarlamak UpdateCommand için yöntemi ve GetDeleteCommand özelliğini ayarlamak DeleteCommand için yöntemi kullanılır. Kod, Müşteriler tablosuna yeni bir satır ekler ve veri kaynağını güncelleştirir. Kod daha sonra Müşteriler tablosu için tanımlanan birincil anahtar olan CustomerID'de arama yaparak eklenen satırı bulur. CompanyName değerini değiştirir ve veri kaynağını güncelleştirir. Son olarak kod satırı siler.
static void CreateDataAdapter(string providerName, string connectionString)
{
try
{
// Create the DbProviderFactory and DbConnection.
DbProviderFactory factory =
DbProviderFactories.GetFactory(providerName);
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = connectionString;
using (connection)
{
// Define the query.
const string queryString =
"SELECT CustomerID, CompanyName FROM Customers";
// Create the select command.
DbCommand command = factory.CreateCommand();
command.CommandText = queryString;
command.Connection = connection;
// Create the DbDataAdapter.
DbDataAdapter adapter = factory.CreateDataAdapter();
adapter.SelectCommand = command;
// Create the DbCommandBuilder.
DbCommandBuilder builder = factory.CreateCommandBuilder();
builder.DataAdapter = adapter;
// Get the insert, update and delete commands.
adapter.InsertCommand = builder.GetInsertCommand();
adapter.UpdateCommand = builder.GetUpdateCommand();
adapter.DeleteCommand = builder.GetDeleteCommand();
// Display the CommandText for each command.
Console.WriteLine("InsertCommand: {0}",
adapter.InsertCommand.CommandText);
Console.WriteLine("UpdateCommand: {0}",
adapter.UpdateCommand.CommandText);
Console.WriteLine("DeleteCommand: {0}",
adapter.DeleteCommand.CommandText);
// Fill the DataTable.
DataTable table = new();
adapter.Fill(table);
// Insert a new row.
DataRow newRow = table.NewRow();
newRow["CustomerID"] = "XYZZZ";
newRow["CompanyName"] = "XYZ Company";
table.Rows.Add(newRow);
adapter.Update(table);
// Display rows after insert.
Console.WriteLine();
Console.WriteLine("----List All Rows-----");
foreach (DataRow row in table.Rows)
{
Console.WriteLine("{0} {1}", row[0], row[1]);
}
Console.WriteLine("----After Insert-----");
// Edit an existing row.
DataRow[] editRow = table.Select("CustomerID = 'XYZZZ'");
editRow[0]["CompanyName"] = "XYZ Corporation";
adapter.Update(table);
// Display rows after update.
Console.WriteLine();
foreach (DataRow row in table.Rows)
{
Console.WriteLine("{0} {1}", row[0], row[1]);
}
Console.WriteLine("----After Update-----");
// Delete a row.
DataRow[] deleteRow = table.Select("CustomerID = 'XYZZZ'");
foreach (DataRow row in deleteRow)
{
row.Delete();
}
adapter.Update(table);
// Display rows after delete.
Console.WriteLine();
foreach (DataRow row in table.Rows)
{
Console.WriteLine("{0} {1}", row[0], row[1]);
}
Console.WriteLine("----After Delete-----");
Console.WriteLine("Customer XYZZZ was deleted.");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Shared Sub CreateDataAdapter(ByVal providerName As String, _
ByVal connectionString As String)
' Create the DbProviderFactory and DbConnection.
Try
Dim factory As DbProviderFactory = _
DbProviderFactories.GetFactory(providerName)
Dim connection As DbConnection = _
factory.CreateConnection()
connection.ConnectionString = connectionString
Using connection
' Define the query.
Dim queryString As String = _
"SELECT CustomerID, CompanyName FROM Customers"
'Create the select command.
Dim command As DbCommand = _
factory.CreateCommand()
command.CommandText = queryString
command.Connection = connection
' Create the DbDataAdapter.
Dim adapter As DbDataAdapter = _
factory.CreateDataAdapter()
adapter.SelectCommand = command
' Create the DbCommandBuilder.
Dim builder As DbCommandBuilder = _
factory.CreateCommandBuilder()
builder.DataAdapter = adapter
' Get the insert, update and delete commands.
adapter.InsertCommand = builder.GetInsertCommand()
adapter.UpdateCommand = builder.GetUpdateCommand()
adapter.DeleteCommand = builder.GetDeleteCommand()
' Display the CommandText for each command.
Console.WriteLine("InsertCommand: {0}", _
adapter.InsertCommand.CommandText)
Console.WriteLine("UpdateCommand: {0}", _
adapter.UpdateCommand.CommandText)
Console.WriteLine("DeleteCommand: {0}", _
adapter.DeleteCommand.CommandText)
' Fill the DataTable
Dim table As New DataTable
adapter.Fill(table)
' Insert a new row.
Dim newRow As DataRow = table.NewRow
newRow("CustomerID") = "XYZZZ"
newRow("CompanyName") = "XYZ Company"
table.Rows.Add(newRow)
adapter.Update(table)
' Display rows after insert.
Console.WriteLine()
Console.WriteLine("----List All Rows-----")
Dim row As DataRow
For Each row In table.Rows
Console.WriteLine("{0} {1}", row(0), row(1))
Next
Console.WriteLine("----After Insert-----")
' Edit an existing row.
Dim editRow() As DataRow = _
table.Select("CustomerID = 'XYZZZ'")
editRow(0)("CompanyName") = "XYZ Corporation"
adapter.Update(table)
' Display rows after update.
Console.WriteLine()
For Each row In table.Rows
Console.WriteLine("{0} {1}", row(0), row(1))
Next
Console.WriteLine("----After Update-----")
' Delete a row.
Dim deleteRow() As DataRow = _
table.Select("CustomerID = 'XYZZZ'")
For Each row In deleteRow
row.Delete()
Next
adapter.Update(table)
table.AcceptChanges()
' Display each row and column value after delete.
Console.WriteLine()
For Each row In table.Rows
Console.WriteLine("{0} {1}", row(0), row(1))
Next
Console.WriteLine("----After Delete-----")
Console.WriteLine("Customer XYZZZ was deleted.")
End Using
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
Parametreleri İşleme
.NET Framework veri sağlayıcıları, parametreleri ve parametre yer tutucularını adlandırma ve belirtme işlemlerini farklı şekilde işler. Bu söz dizimi, aşağıdaki tabloda açıklandığı gibi belirli bir veri kaynağına uyarlanmıştır.
Veri sağlayıcı | Parametre adlandırma söz dizimi |
---|---|
SqlClient |
parametername biçiminde @ adlandırılmış parametreleri kullanır. |
OracleClient |
Adlandırılmış parametreleri parmname (veya parmname) biçiminde : kullanır. |
OleDb |
Soru işareti (? ) ile gösterilen konumsal parametre işaretçilerini kullanır. |
Odbc |
Soru işareti (? ) ile gösterilen konumsal parametre işaretçilerini kullanır. |
Fabrika modeli parametreli DbCommand
ve DbDataAdapter
nesneler oluşturmak için yararlı değildir. Veri sağlayıcınıza uyarlanmış parametreler oluşturmak için kodunuzu dallandırmalısınız.
Önemli
Doğrudan SQL deyimleri oluşturmak için dize birleştirmeyi kullanarak sağlayıcıya özgü parametrelerin tamamen kaçınılması güvenlik nedenleriyle önerilmez. Parametreler yerine dize birleştirmeyi kullanmak uygulamanızı SQL ekleme saldırılarına karşı savunmasız bırakır.