Aracılığıyla paylaş


Saklı yordamlarla verileri değiştirme

Şunlar için geçerlidir: .NET Framework .NET .NET Standard

ADO.NET indirin

Saklı yordamlar verileri giriş parametresi olarak kabul edebilir ve verileri çıkış parametreleri, sonuç kümeleri veya dönüş değerleri olarak döndürebilir. Aşağıdaki örnekte, SQL Server için Microsoft SqlClient Veri Sağlayıcısı'nın giriş parametrelerini, çıkış parametrelerini ve dönüş değerlerini nasıl gönderdiği ve aldığı gösterilmektedir. Örnek, birincil anahtar sütununun bir kimlik sütunu olduğu bir tabloya yeni bir kayıt ekler.

Uyarı

Verileri SqlDataAdapter kullanarak düzenlemek veya silmek için saklı yordamlar kullanıyorsanız, saklı yordam tanımında SET NOCOUNT ON ifadesini kullanmadığınızdan emin olun. Bu durum, etkilenen satır sayısının sıfır olmasına yol açar ve DataAdapter bunu bir eşzamanlılık çakışması olarak yorumlar. Bu olayda bir DBConcurrencyException fırlatılır.

Example

Örnek, NorthwindCategories tablosuna yeni bir kategori eklemek için aşağıdaki saklı yordamı kullanır. Saklı yordam , CategoryName sütunundaki değeri giriş parametresi olarak alır ve SCOPE_IDENTITY() işlevini kullanarak kimlik alanının yeni değerini ( CategoryID) alır ve bunu bir çıkış parametresinde döndürür. RETURN deyimi, eklenen satır sayısını döndürmek için @@ROWCOUNT işlevini kullanır.

CREATE PROCEDURE dbo.InsertCategory  
  @CategoryName nvarchar(15),  
  @Identity int OUT  
AS  
INSERT INTO Categories (CategoryName) VALUES(@CategoryName)  
SET @Identity = SCOPE_IDENTITY()  
RETURN @@ROWCOUNT  

Aşağıdaki kod örneği, yukarıda gösterilen InsertCategory saklı yordamını, InsertCommand öğesinin SqlDataAdapter kaynağı olarak kullanır. "@Identity çıkış parametresi, DataSet kaydı veritabanına eklendikten sonra, Update yönteminin SqlDataAdapter çağırılmasıyla yansıtılacaktır." Kod, dönüş değerini de alır.

using System;
using System.Data;
using Microsoft.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = GetConnectionString();
        ReturnIdentity(connectionString);
        // Console.ReadLine();
    }

    private static void ReturnIdentity(string connectionString)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            // Create a SqlDataAdapter based on a SELECT query.
            SqlDataAdapter adapter = new SqlDataAdapter(
                "SELECT CategoryID, CategoryName FROM dbo.Categories", connection);

            // Create a SqlCommand to execute the stored procedure.
            adapter.InsertCommand = new SqlCommand("InsertCategory", connection);
            adapter.InsertCommand.CommandType = CommandType.StoredProcedure;

            // Create a parameter for the ReturnValue.
            SqlParameter parameter = adapter.InsertCommand.Parameters.Add("@RowCount", SqlDbType.Int);
            parameter.Direction = ParameterDirection.ReturnValue;

            // Create an input parameter for the CategoryName.
            // You do not need to specify direction for input parameters.
            adapter.InsertCommand.Parameters.Add("@CategoryName", SqlDbType.NChar, 15, "CategoryName");

            // Create an output parameter for the new identity value.
            parameter = adapter.InsertCommand.Parameters.Add("@Identity", SqlDbType.Int, 0, "CategoryID");
            parameter.Direction = ParameterDirection.Output;

            // Create a DataTable and fill it.
            DataTable categories = new DataTable();
            adapter.Fill(categories);

            // Add a new row.
            DataRow categoryRow = categories.NewRow();
            categoryRow["CategoryName"] = "New Beverages";
            categories.Rows.Add(categoryRow);

            // Update the database.
            adapter.Update(categories);

            // Retrieve the ReturnValue.
            Int rowCount = (Int)adapter.InsertCommand.Parameters["@RowCount"].Value;

            Console.WriteLine("ReturnValue: {0}", rowCount.ToString());
            Console.WriteLine("All Rows:");
            foreach (DataRow row in categories.Rows)
            {
                    Console.WriteLine("  {0}: {1}", row[0], row[1]);
            }
        }
    }

    static private string GetConnectionString()
    {
        // To avoid storing the connection string in your code,
        // you can retrieve it from a configuration file.
        return "Data Source=(local);Initial Catalog=Northwind;Integrated Security=true";
    }
}

Ayrıca bakınız