2010-06-25 32 views
5

Sunucuya güncelleştirmeleri/ekler/silmeleri göndermek için SqlCommandBuilder kullandığımda, .GetUpdateCommand(), .GetInsertCommand() ve .GetDeleteCommand()'u aramam gerekir mi?SqlDataAdpater.Update() kullanmadan önce SqlCommandBuilder.GetUpdateCommand() çağrılması gerekiyor mu?

using (var adapter = new SqlDataAdapter("select * from MyTable", _connection)) 
using (var builder = new SqlCommandBuilder(adapter)) 
{ 
    adapter.Fill(dt); 

    //Magic happens   

    builder.GetUpdateCommand(); //is this line necessary 
    builder.GetInsertCommand(); //is this line necessary 
    adapter.Update(dt); 
} 

Yapacak doğru prosedür ne olduğuna conflictingexamples gördük. Onsuz çalışır biliyorum ama sahnelerin arkasında özel bir şey yapıp yapmadığını bilmiyordum. Bu gerekli mi yoksa kargo kült programlama mı?

cevap

5

GetInsertCommand() numaralı telefonu aramadıysam bir hatanın meydana gelebileceği bir senaryo ile gelip gelemeyeceğimi görmek için sınama veritabanımda bazı testler yaptım. Benim durumumda, bir veritabanı içinde birkaç farklı tabloyu güncellediğimde oldu.

Herhangi bir nedenle 4. tablomun güncellenmesi sırasında doğru şekilde eklenemedi. Bu beni rahatsız etti, bu yüzden bana here'u getiren biraz daha araştırma yapmaya karar verdim. Şunlara dikkat ediniz:

Transact-SQL deyimi ilk oluşturulduktan sonra, uygulama herhangi bir şekilde ifadeyi değiştirirse RefreshSchema'yı açıkça çağırmalıdır. Aksi halde, GetInsertCommand hala doğru olmayabilir önceki ifadeden gelen bilgileri kullanacaktır.

Bu, bunun aramadan çalışabileceğini bana söyler, ancak bunu aramak daha iyidir. Bazen neden işe yaradığı için mantığı bulmaya çalıştım, bazen de değil. Ama tamamen çözemedim.

+0

Bunları ayarlamak için GEREKMEYİN, bazı örneklerin neden yaptığını merak ediyordum. (Kodları alma komutlarını çağırmadan çalıştırdım ve sunucumu güncelledim.) –

İlgili konular