c#
  • linq
  • 2011-10-13 22 views 1 likes 
    1

    我目前使用具有我可以使用LINQ更新多列嗎?

    Sql.Append("UPDATE Store SET" + 
    "LogoAlign='" + (String.Compare(drpLogoAlign.SelectedValue, String.Empty) == 0 ? "NULL" : "'" + drpLogoAlign.SelectedValue + "'") + 
    "', Height='" + DB.QuerySafeDisplayHTML(txtHeight.Text.ToString()) + 
    "', Width='" + DB.QuerySafeDisplayHTML(txtWidth.Text.ToString()) + 
    

    現有的代碼,它繼續這樣,對錶中的所有列正在更新。我想知道使用LINQ會更好,更容易,更有益,如果有的話,我會怎麼做呢?

    感謝

    +2

    **警告**您的代碼易受sql注入攻擊。 –

    +1

    你用linq到sql或ef是什麼? –

    +0

    LINQ本身不會更新,只會查詢。如果您先將適當的對象綁定到GUI,其中一個ORM庫可能會幫助您。 –

    回答

    0

    對LINQ到實體你可以得到所有的Store不是通過它們循環改變的價值和使用實體來SaveChanges

    例如:

    using (TestDBEntities ctx = new TestDBEntities()) 
    { 
        var allStore = ctx.Stores; 
        foreach(var store in allStore) 
        { 
         store.LogoAlign = (String.Compare(drpLogoAlign.SelectedValue, String.Empty) == 0 ? "NULL" : "'" + drpLogoAlign.SelectedValue + "'"); 
         store.Height = txtHeight.Text.ToString(); 
        } 
        ctx.SaveChanges(); 
    } 
    

    你可以做同樣的使用LINQ要使用DataContext的SQL語句。

    using (TestDataContext ctx = new TestDataContext()) 
    { 
        var allStore = ctx.Stores; 
        foreach(var store in allStore) 
        { 
         store.LogoAlign = (String.Compare(drpLogoAlign.SelectedValue, String.Empty) == 0 ? "NULL" : "'" + drpLogoAlign.SelectedValue + "'"); 
         store.Height = txtHeight.Text.ToString(); 
        } 
        ctx.SubmitChanges(); 
    } 
    

    但是,如果你想更多的性能,我想應該是在stored procedure,這樣你就不需要在更新之前得到的所有數據。

    +0

    謝謝你,我正在考慮你的建議,只是要創建一個存儲過程,我會將你的答案標記爲我使用的那個。謝謝你的幫助 –

    相關問題