Dil

DbDataAdapter ile Verileri Değiştirme

CreateDataAdapter nesnesinin DbProviderFactory yöntemi, fabrikayı oluşturduğunuz sırada belirtilen temel veri sağlayıcısına güçlü şekilde türlenmiş bir DbDataAdapter nesne verir. Ardından, bir DbCommandBuilder kullanarak bir veri kaynağından DataSet veri eklemek, güncellemek ve silmek için komutlar oluşturabilirsiniz.

DbDataAdapter ile Veri Alma

Bu örnek, türü kesin olarak belirlenmiş bir DbDataAdapter nesnesinin, bir sağlayıcı adı ve bağlantı dizesine dayanarak nasıl oluşturulacağını göstermektedir. Kod, bir CreateConnection oluşturmak için DbProviderFactory'in DbConnection yöntemini kullanır. Ardından, kod CreateCommand yöntemini kullanarak DbCommand oluşturur ve CommandText ve Connection özelliklerini ayarlayarak veri seçer. Son olarak, kod DbDataAdapter yöntemini kullanarak bir CreateDataAdapter nesnesi oluşturur ve onun SelectCommand özelliğini ayarlar. Fill yöntemi DbDataAdapter, verileri bir DataTable'e yü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
#If NET Then
            DbProviderFactories.RegisterFactory("Microsoft.Data.SqlClient", SqlClientFactory.Instance)
#End If
            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 örnek, veri kaynağındaki verileri güncellemek için gerekli komutları oluşturmak amacıyla bir DataTable kullanarak, DbDataAdapter içindeki verilerin nasıl değiştirileceğini göstermektedir. SelectCommand öğesinin DbDataAdapter değeri, Müşteriler tablosundan CustomerID ve CompanyName bilgilerini alacak şekilde ayarlanır. GetInsertCommand yöntemi, InsertCommand özelliğini ayarlamak için kullanılır, GetUpdateCommand yöntemi, UpdateCommand özelliğini ayarlamak için kullanılır ve GetDeleteCommand yöntemi, DeleteCommand özelliğini ayarlamak için 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: {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
#If NET Then
            DbProviderFactories.RegisterFactory("Microsoft.Data.SqlClient", SqlClientFactory.Instance)
#End If
            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 : (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.

Ayrıca bkz.