Merhaba,
SQL’de stored prosedür kullanımı yönetim açısından kolaylıklar sağladığından kullanmayı tercih ediyorum. Şimdiye kadar çoklu kayıt güncellemelerinde 15-20 kayıt güncellemem gerektiği durumlarda bir döngü içerisinde tek tek çağırıyordum SP’yi. Açıkcası çok da sıkıntı olmuyordu.
Ancak kayıt sayısı arttıkça bu döngüler performansa negatif etki edebiliyor.
Bu sebeple toplu güncelleme ihtiyacım doğdu. Onu da şu şekilde hallettim.
Lazım olan olursa diyerek buraya bırakıyorum:
C#
foreach (UrunTedarikci item in diziUrunTedarikci)
{
bfrXml.Append("<row");
bfrXml.Append(" Id=\"");
bfrXml.Append(item.Id);
bfrXml.Append("\"");
bfrXml.Append(" FirmaKodu=\"");
bfrXml.Append(item.FirmaKodu);
bfrXml.Append("\"");
bfrXml.Append(" TedarikciKodu=\"");
bfrXml.Append(item.TedarikciKodu);
bfrXml.Append("\"");
bfrXml.Append(" TedarikciAdi=\"");
bfrXml.Append(item.TedarikciAdi);
bfrXml.Append("\"");
bfrXml.Append(" GuncelleyenKullaniciId=\"");
bfrXml.Append(this.GecerliKullanici.Id.ToString());
bfrXml.Append("\" />");
}
List<SqlParameter> lstParametreler = new List<SqlParameter>() { new SqlParameter() { ParameterName = "@TedarikciXml", Value = bfrXml.ToString().Replace(@"\", @"") , Direction = ParameterDirection.Input, DbType = DbType.Xml } };
int etkilenenKayitSayisi = executeInsertUpdateDelete("PRC_TEDARIKCIGUNCELLE", lstParametreler);
private int executeInsertUpdateDelete(string spIsim, List<SqlParameter> spParametreleri)
{
int etkilenenKayitSayisi = 0;
using (SqlConnection con = new SqlConnection(getirBaglantiCumlesi()))
{
using (SqlCommand cmd = new SqlCommand(spIsim, con) { CommandTimeout = 40 })
{
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter param in spParametreleri)
{
cmd.Parameters.Add(param);
}
con.Open();
etkilenenKayitSayisi = cmd.ExecuteNonQuery();
con.Close();
}
}
return etkilenenKayitSayisi;
}
Sql Server
CREATE PROCEDURE [dbo].[PRC_TEDARIKCIGUNCELLE]
@TedarikciXml XML
AS
BEGIN
UPDATE ut
SET ut.FirmaKodu = t.v.value('@FirmaKodu', 'varchar(2)')
, ut.TedarikciKodu = t.v.value('@TedarikciKodu', 'varchar(20)')
, ut.TedarikciAdi = t.v.value('@TedarikciAdi', 'nvarchar(250)')
, ut.GuncelleyenKullaniciId = t.v.value('@GuncelleyenKullaniciId', 'int')
, ut.GuncellemeTarihi = GETDATE()
FROM UrunTedarikci ut
INNER JOIN @TedarikciParametreXml.nodes('/row') AS t (v) ON t.v.value('@Id', 'int') = ut.Id;
END;
Selamlar.