Her şey başlığında.C#, Okurken SQL Server tablosundan INSERT ve SİLİNİZİ OK
SqlCommand
sonucunu okudum (bu tablo1 ve tablo2'nin birleşim sorgusudur).
using (SqlCommand cmd = new SqlCommand(sqlCommand, eve.Database))
{
using (SqlDataReader sdr = cmd.ExecuteReader())
{
//Performing some tasks
}
}
Aslında "bazı görevleri yerine" kısmen, benim katılmak masanın birinde bazı INSERT
ve DELETE
(biz örneğin table1 bahsedeceğiz) yapmak.
Şu anda bir şirkette stajyerlik yapıyorum, kod az miktarda veriyle çalışıyor, ancak öğretmenim bunun iyi bir fikir olmadığını söylüyor çünkü benim masada okuma ve yazma konusunda bazı problemlerim olabiliyor çünkü SQL Server kilitler.
INSERT ve DELETE'imi tetiklemek için bunu eklerim, sadece yeni bir bağlantı açıyorum (bu yüzden ana bağlantıyı kullanmıyorum) ve ExecuteNonQuery()
numaralı çağrıyı çalıştırıyorum.
using (SqlConnection cnx = Piivo.Utils.Open(Configuration))
{
SqlCommand cmd = new SqlCommand(command, cnx);
cmd.ExecuteNonQuery();
}
Tabii ki sorum şu: Bu özel durumda bazı kilitler olabilir mi? Veya "ExecuteNonQuery" kilitlemeyi engelleyebilir mi? Ve bunu yapmanın iyi bir yolu mu? – Pyr0technicien
Kilitlemeye başlamak derin bir dalıştır ve ilgili sorgulara, verilere ve ayarlara çok bağlıdır. Bu söyleniyor ki, modern RDBMS eşzamanlı okuma/yazma işlemlerini yürütmek için çok şey yapılıyor. Kilitleme davranışı istediğin şey değilse, o zaman daha spesifik bir soruyla geri dönmelisin. – dbugger
SQL Server ** kilitler yerleştirir - 'SELECT' satırlarına "paylaşılan" kilitler, ** özel ** eklediğiniz veya sildiğiniz satırları kilitler. Ama bu SQL Server normal ** satır düzeyinde ** kilitlediğinden bu yana, sadece iyi çalışır, - bireysel satırlar kilitlenir - tablo yok. Tek bir işlemde tek bir tabloda 5000'den fazla ekleme ve/veya silmediğiniz sürece - eğer yaptıysanız, SQL Server * bir tablo düzeyi kilidine kilitlenecek * ve bir tablo düzeyinde * artacaktır ** özel ** kilit, o masadan olmasından * bir şey * önler –