Nyelv
Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A CreateDataAdapter objektum DbProviderFactory metódusa egy olyan DbDataAdapter objektumot ad vissza, amely erősen típusos a gyár létrehozásakor megadott mögöttes adatszolgáltatóhoz. Ezután DbCommandBuilder parancsok létrehozásával beszúrhat, frissíthet és törölhet adatokat egy DataSet adatforrásból.
Adatok lekérése DbDataAdapter segítségével
Ez a példa bemutatja, hogyan hozhat létre erősen típusos DbDataAdapter egy szolgáltatónév és kapcsolati karakterlánc alapján. A kód a CreateConnection metódus használatával DbProviderFactory hoz létre egy DbConnection. Ezután a kód a CreateCommand metódus használatával hoz létre egy DbCommand adatot az adatok kiválasztásához annak CommandText és Connection tulajdonságainak beállításával. Végül a kód létrehoz egy DbDataAdapter objektumot a CreateDataAdapter metódus használatával, és beállítja annak tulajdonságát SelectCommand . A FillDbDataAdapter metódusa egy DataTable-be tölti be az adatokat.
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
Adatok módosítása DbDataAdapterrel
Ez a példa bemutatja, hogyan módosíthatók az adatok az DataTable egy DbDataAdapter használatával, ahol egy DbCommandBuilder generálja az adatok adatforrásban történő frissítéséhez szükséges parancsokat. A SelectCommandDbDataAdapter beállítása a CustomerID és a CompanyName lekérésére van beállítva a Customers táblából. A GetInsertCommand metódus a InsertCommand tulajdonság beállítására, a GetUpdateCommand metódus a tulajdonság beállítására UpdateCommand , a GetDeleteCommand metódus pedig a tulajdonság beállítására DeleteCommand szolgál. A kód új sort ad hozzá a Vevők táblához, és frissíti az adatforrást. A kód ezután megkeresi a hozzáadott sort a CustomerID mezőben való kereséssel, amely az Ügyfelek táblában meghatározott elsődleges kulcs. Módosítja a CompanyName nevet, és frissíti az adatforrást. Végül a kód törli a sort.
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: {adapter.InsertCommand.CommandText}");
Console.WriteLine($"UpdateCommand: {adapter.UpdateCommand.CommandText}");
Console.WriteLine($"DeleteCommand: {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($"{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($"{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($"{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
Paraméterek kezelése
A .NET-keretrendszer adatszolgáltatók eltérően kezelik a paraméterek és a paraméterek helyőrzőinek elnevezését és megadását. Ez a szintaxis egy adott adatforrásra van szabva, az alábbi táblázatban leírtak szerint.
| Adatszolgáltató | Paraméterelnevezési szintaxis |
|---|---|
SqlClient |
Elnevezett paramétereket használ a @paraméternév formátumban. |
OracleClient |
Elnevezett paramétereket használ a :parmname (vagy parmname) formátumban. |
OleDb |
Kérdőjel (?) által jelzett pozícióparaméter-jelölőket használ. |
Odbc |
Kérdőjel (?) által jelzett pozícióparaméter-jelölőket használ. |
A gyári modell nem hasznos paraméteres DbCommand és DbDataAdapter objektumok létrehozásához. Az adatszolgáltatóra szabott paraméterek létrehozásához el kell ágaznia a kódban.
Fontos
Biztonsági okokból nem ajánlott elkerülni a szolgáltatóspecifikus paramétereket a közvetlen SQL-utasítások létrehozásához sztringösszefűzés használatával. A paraméterek helyett sztringösszefűzés használata sebezhetővé teszi az alkalmazást az SQL-injektálási támadásokkal szemben.