2011年12月11日 星期日

LINQ to SQL 增刪改


假設今天要更新一筆 Table tb(int No, string Name, string Favorite_Song) 中的資料呢?

 <新增>
  var tmp = new tb
  {
   tmp.No = 1,
   tmp.Name = "Veck",
   tmp.Favorite_Song = "Amazing Grace"
  };
 
  tb.InsertOnSubmit(tmp);   //在.NET 3.5 是 tb.Add(tmp);
  this.SubmitOnChange();    //一定要有這一行,不然資料會卡在記憶體,沒有寫入資料庫中



<刪除>
 var tmp = tb.single(c => c.No == 1);
 tb.DeleteOnSubmit(tmp);   //在.NET 3.5 是 tb.Remove(tmp);
 this.SubmitChange();

 <修改>
 var tmp = tb.single(c => c.No == 1);
 tmp.Name = "Kevin";
 this.SubmitChange();


*要稍微注意的是,如果要變動的資料表不只一個,或是有連動關係
有可能在更新的時候出現錯誤,但是資料某部分是有寫進去的
例如 tb1 和 tb2 以 No 做為 Foreign Key 連接,其中tb2為tb1的子資料表
今天若要新增一筆資料進tb2,必須先新增tb1一筆資料

var tmp = new tb1();
tmp.No = 2;
tb1.InsertOnSubmit(tmp);
this.SubmitChange();   //在這一行可能會出現錯誤,因為tb2中沒有同步新增 No = 2 的 Key

var tmp2 = new tb2();
tmp2.No = 2;
tb2.InsertOnSubmit(tmp);
this.SubmitChange();

  <更正版>
var tmp = new tb1();
tmp.No = 2;
tb1.InsertOnSubmit(tmp);
var tmp2 = new tb2();
tmp2.No = 2;
tb2.InsertOnSubmit(tmp);
this.SubmitChange();      //差別在於只有在最後的時候才進行新增,這樣就不會有不同步的問題了

2 則留言: