Yazimizin anahtar kelimesi Table Valued Parameters (Tablo degerli parametreler).
MSSQL 2008 Serveri ile birlikte gelen yeniliklerden birtanesi.
Ben Stored Procedure ile gecici Tablo veya ek kod yazmadan kolayca nasil coklu kayit göndere biliriz onu gösterecegim.
Bir müsteri tablomuz oldugunu varsayalim
create table Musteri ( ID int not null primary key identity(1,1), Isim varchar(50) not null, Sehir varchar(50) null, Tel varchar(10) null, )
2008 den önceki versiyonlarda böyle bir procedure u kac icerik ekliyorsak okadar calistirmamiz gerekiyordu.
TVP ile nasil yapiyoruz ona bakalim.
Veritabanimizda yeni bir Table User Defined Type olusturalim.
create type MusteriTableType as table ( Isim varchar(50), Sehir varchar(50), Tel varchar(10) )
ardindan stored procedure umuzu hazirliyalim.
create procedure MusteriCokluInsert ( @Okuvar MusteriTableType readonly ) as insert into Customers (Isim, Sehir, Tel) select Name, City, Phone from @okuvar;
Simdi C# Programimizda bir DataTable olusturalim
DataTable MusteriTable = new DataTable(); MusteriTable.Columns.Add("Isim", typeof(string)); MusteriTable.Columns.Add("Sehir", typeof(string)); MusteriTable.Columns.Add("Tel", typeof(string));
birkac degerler atiyalim
MusteriTable.Rows.Add("Kadir", "Sakarya", "123"); MusteriTable.Rows.Add("Ahmetr", "Istanbul", "567"); MusteriTable.Rows.Add("Musti", "Bodrum", "789");
ve son olarak C# programimizdan stored procedurumuzu calistiralim
using (SqlConnection conn = new SqlConnection("...")) { SqlCommand cmd = conn.CreateCommand(); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandText = "dbo.MusteriCokluInsert"; SqlParameter param = cmd.Parameters.AddWithValue("@Okuvar", MusteriTable); conn.Open(); cmd.ExecuteNonQuery(); }
Simdi Müsteri tablomuza baktigimizda icerikler eklenmis olacaktir.
hepsi bukadar kolay gelsin.