2013-05-17 22 views
0

我試圖用我的web應用程序中的1個按鈕更新2個不同的表格。我目前正在使用asp.net開發我的web應用程序。我想知道是否有可能從2個不同的表中更新2個不同的列。用asp.net中的1個按鈕更新2個不同的表格

這裏是我的後端代碼

protected void btnAssign_Click(object sender, EventArgs e) 
    { 
     //SqlConnection connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security= SSPI"); 

     //connAdd.Open(); 
     //string mySQL; 
     //mySQL = "Update LoginRegisterPoliceOfficer Set caseid ='" + lblCID.Text + "' where fullname ='" + DDLpolice.SelectedItem.Text + "'"; 
     //SqlCommand cmdAdd = new SqlCommand(mySQL, connAdd); 
     //cmdAdd.ExecuteNonQuery(); 

     //connAdd.Close(); 



     SqlConnection connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security= SSPI"); 

     connAdd.Open(); 
     string mySQLL; 
     mySQLL = "Update Report Set handle = 'handled' where caseid='"+lblCID.Text+"'"; 
     SqlCommand cmdAdd = new SqlCommand(mySQLL, connAdd); 
     cmdAdd.ExecuteNonQuery(); 

     connAdd.Close(); 


    } 

我只能夠更新1,但失敗,第二次更新。因此,我註釋掉了我的一個sql代碼。

回答

1

如果您對兩個表使用相同的數據庫,則無需關閉並打開連接。使用相同的連接,並逐個執行2個語句。需要

protected void btnAssign_Click(object sender, EventArgs e) 
{ 
    using (var connAdd = new SqlConnection("Data Source = localhost; Initial Catalog = project; Integrated Security= SSPI")) 
    { 
     connAdd.Open(); 
     var sql = "Update LoginRegisterPoliceOfficer Set caseid ='" + lblCID.Text + "' where fullname ='" + DDLpolice.SelectedItem.Text + "'"; 
     using(var cmdAdd = new SqlCommand(sql, connAdd)) 
     { 
      cmdAdd.ExecuteNonQuery(); 
     } 

     sql = "Update Report Set handle = 'handled' where caseid='"+lblCID.Text+"'"; 
     using (var cmdAdd = new SqlCommand(mySQLL, connAdd)) 
     { 
       cmdAdd.ExecuteNonQuery(); 
     } 

     connAdd.Close(); 
    } 
} 

using statement所以.NET運行時回收內存當對象被銷燬,可能會丟失,沒有他們,你的代碼引入了內存泄漏這會影響你的網站的性能(除其他事項外)。

var statement是一種簡潔的聲明變量的方式。我喜歡在=符號的右側顯示變量類型時使用它,否則代碼看起來冗餘且冗長。

最後,這段代碼很容易出現sql injection attack。用張貼值構造sql可能非常危險。如果值lblCID.Text是'(drop table LoginRegisterPoliceOfficer)',該怎麼辦?一個更安全的方式來執行查詢是通過使用存儲過程或sql parameters

+0

謝謝你的工作。 :) –

0

是的,你可以。您應該能夠在單個ASP.NET函數中執行任意數量的更新,前提是您不會遇到超時或意外關閉要打開的某些內容。

讓SqlConnection對象保持打開狀態,並創建兩個sqlCommand實例。或者將你的兩個UPDATE作爲單個字符串發送,在它們之間帶有換行符和分號。或者將邏輯移到服務器端,並有一個知道要更新它們的存儲過程。 (你可以做一個可更新的視圖?)

相關問題