Mengubah data dengan prosedur tersimpan
Berlaku untuk: .NET Framework
.NET
.NET Standard
Prosedur tersimpan bisa menerima data sebagai parameter input dan bisa mengembalikan data sebagai parameter output, tataan hasil, atau mengembalikan nilai. Sampel di bawah ini menggambarkan bagaimana Penyedia Data Microsoft SqlClient untuk SQL Server mengirim dan menerima parameter input, parameter output, dan mengembalikan nilai. Contoh menyisipkan rekaman baru ke dalam tabel di mana kolom kunci utama adalah kolom identitas.
Catatan
Jika Anda menggunakan prosedur tersimpan untuk mengedit atau menghapus data menggunakan SqlDataAdapter, pastikan Anda tidak menggunakan SET NOCOUNT ON dalam definisi prosedur tersimpan. Ini menyebabkan jumlah baris yang terpengaruh dikembalikan menjadi nol, yang ditafsirkan DataAdapter
sebagai konflik konkurensi. Dalam hal ini, DBConcurrencyException akan dilemparkan.
Contoh
Sampel menggunakan prosedur tersimpan berikut untuk menyisipkan kategori baru ke dalam tabel Kategori Northwind. Prosedur tersimpan mengambil nilai di kolom CategoryName sebagai parameter input dan menggunakan fungsi SCOPE_IDENTITY() untuk mengambil nilai baru bidang identitas, CategoryID, dan mengembalikannya dalam parameter output. Pernyataan RETURN menggunakan fungsi @@ROWCOUNT untuk mengembalikan jumlah baris yang disisipkan.
CREATE PROCEDURE dbo.InsertCategory
@CategoryName nvarchar(15),
@Identity int OUT
AS
INSERT INTO Categories (CategoryName) VALUES(@CategoryName)
SET @Identity = SCOPE_IDENTITY()
RETURN @@ROWCOUNT
Contoh kode berikut menggunakan prosedur tersimpan yang InsertCategory
ditunjukkan di atas sebagai sumber untuk InsertCommand dari SqlDataAdapter. Parameter @Identity
output akan tercermin dalam DataSet setelah rekaman dimasukkan ke dalam database ketika metode Update
dari SqlDataAdapter dipanggil. Kode juga mengambil nilai yang dikembalikan.
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";
}
}
Lihat juga
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk