2011-06-29 11 views
5

私はlinqを使ってDBをSQLに更新する方法について多くの質問があることを知っています。ここlinq to sql update standard

は私のコードです:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //load data to page 
    } 
    else 
    { 
     using (var db = new App_Data.MyDataContext()) 
     { 
      var Query = (from p in db.peoples 
         where p.ipeople_ID == 59225 
         select p).Single(); 

      Query.cFirstName = FirstName.Value; 

      try { db.SubmitChanges(); } 
      catch (ChangeConflictException) 
      { 
       db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges); 
       db.SubmitChanges(); 
      } 
     } 
    } 
} 

私が試行錯誤でasp.netを勉強していますので、私はそれが動作します知っている、コードが希望の場合だけ知らない(とGoogle検索がたくさん!)私を会議から笑ってください! :D

おかげ

答えて

2

いくつかの変更:

私は離れページロードイベントから、あなたのロジックを移動して、明示的に更新/保存するイベントをトリガします。

もし起こっているとすれば、変更の競合に対処するつもりです...私はそのエラーを隠し、変更を再提出しようとはしません。

protected void Page_Load(object sender, EventArgs e) { 
if (!IsPostBack){ 
    //load data to page 
}   
} 

protected void SaveChanges_Click(object sender, EventArgs e) { 
using (var db = new App_Data.MyDataContext()) { 
    var person = db.peoples.SingleOrDefault(p=> p.ipeople_ID == 59225); 

    if(person == null) { 
    // notify UI that person doesn't exist 
    return; 
    } 

    person.cFirstName = txtFirstName.Text; 

    try { db.SubmitChanges(); } 
    catch (Exception ex){ 
    //Log error 
    } 
} 
} 
+0

それで、それを独自の方法で入れておくと、単に送信ボタンのrunatサーバーを持っていて、onclickイベント・コールがSaveChanges_Clickになるのでしょうか? – Limey

+1

はい、うまくいくでしょう! –

+1

すべての助けてくれてありがとう!私はあなたに両方の答えを与えることができることを望む! – Limey

2

は、これはそれのアプローチでは、私にはかなり標準的に見えます。しかし、私は、単一の行をフェッチするために別の、簡単な構文を示唆している:レコードが存在しない場合は

db.Peoples.SingleOrDefault(p => p.ipeople_ID == 59225) 

この方法で、あなたがNULLを取得します。レコードが見つからない場合はSingleが例外をスローします。また、ボタンをクリックしてに更新コードを分けて、ポストバックで直接人を更新するのはやや奇妙なようです。

私はローカル変数の小文字変数も好きですが、私はその点には触れません。