2010-08-27 66 views
3

方案:
我有一個手機比較顯示各種網絡交易的asp.net網站。我們從網絡收到的交易數據位於Excel表格中。我們將數據從excel表格導入到數據庫中每個網絡的表格中。現在,我們收到的數據對於每個網絡都不一致,因爲網絡可能會將電話名稱命名爲'curve 8250',另一個可能會將其命名爲'8250曲線',而另一個可能會將其命名爲'8250曲線'。使用C#更新幾個SQL表中的相同列使用C#

現在,我們有另一個模塊,它允許用戶查看在所有網絡上可用的特定手機的交易。爲了使這個模塊能夠正常工作,我們需要做的是確保所有網絡的電話名稱一致。
爲此,我打算爲webadmin製作一個模塊,該模塊顯示來自所有網絡表格的電話名稱(可能是gridview),網站管理員可以編輯電話名稱以保持一致。從所有表中檢索不同的列名是很容易的,而且完成了。

問題: 現在,真正的部分是我們如何編程模塊,以便它更新所有網絡表中的特定列值。每個表格的模式完全相同。

編輯:我總是忘記添加一些東西:@。我知道這可以在代碼背後以困難的方式完成,運行一個循環。但是,有沒有更簡單,無障礙的方法呢?像一些數據控制,會讓這種情況下的生活變得更容易一些?

更新:
我試着用後面的代碼來做這件事。我做了一個gridview,並使用項目模板顯示數據,並在第二個模板中提供了一個文本框。然後點擊一個按鈕,我運行這段代碼:

protected void Button1_Click(object sender, EventArgs e) 
    { 
     SqlConnection con = new SqlConnection(ConfigurationSettings.AppSettings[0].ToString()); 
     foreach(GridViewRow gvr in GridView1.Rows) 
     {     
      TextBox tb = (TextBox)gvr.FindControl("New Value"); 
      Label lbl = (Label)gvr.FindControl("Old Value"); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.Connection = con; 
      if (lbl.Text != tb.Text) 
      { 

       try //updation if primary key constraint is not broken 
       { 
        con.Open(); 
        cmd.CommandText = myupdatecommand; /*this is not the actual command that I'm passing, the command I'm passing does contain the values lbl.Text & tb.Text. This is just to make it a better read.*/ 
        cmd.ExecuteNonQuery(); 
       } 
       catch (SqlException sqe) 
       { 
        if (sqe.ErrorCode == -2146232060)//if primary key constraint is broken 
        { 
         try 
         { 
          //delete the row from the table that contains only unique phone names 
          cmd.CommandText = deletecommand; 
          cmd.ExecuteNonQuery(); 
         } 
         catch { } 
        } 
       } 
       finally 
       { 
        con.Close(); 
       } 


       //Update table2 
       try   //only updation as here the phone name is not a primary key 
       { 
        con.Open(); 
        cmd.CommandText = updatetable2; 
        cmd.ExecuteNonQuery(); 
       } 
       catch 
       { 

       } 
       finally 
       { 
        con.Close(); 
       } 

       . 
       . 
       . 
       //similarily update rest of the tables 
       . 
       . 
       . 
       Response.Redirect(Request.Url.ToString()); 
      } 
     } 

當我運行這段代碼,一切都發生順利,但是當我們在同一時間更新在網格多行,於更新只出現對於第一個編輯的行,其他編輯的行保持不變。
我知道這一定是我錯過了這裏一個非常小的事情,但我不能夠繼續進行:(

對此事的任何幫助,高度讚賞。在此先感謝!

PS-我使用ASP.Net 3.5,用C#爲後面的代碼和SQL Server 2005作爲後端。

回答

0

說實話,我現在很尷尬回答我自己的問題。

的問題只是,我曾誤把Response.Redirect(Request.Url.ToString());

if環本身是foreach循環內內。

什麼時候我會停止犯愚蠢的錯誤:

0

OK,我會假設你正在使用LINQ到SQL ,但從理論上講,它並不重要,基本原理是一樣的。

你需要一個colle連接字符串,每個數據庫一個。大概你已經有了這個。

using (TransactionScope scope = new TransactionScope()) 
{ 
    foreach (var connStr in listOfConnStr) 
    { 
     using (var db = new MyDataContext(connStr); 
     { 
      // do update here. 
     } 
    } 
} 

就是這樣。

您可以通過lambda函數傳遞「do update here」部分。

+0

實際上數據庫是一樣的,只是表格是不同的,並且我根本不知道LINQ(甚至沒有一個noob在它:s) – Anchit 2010-08-27 14:28:16

+0

是的,我忘了在我的問題中添加這個:我知道這可以在代碼背後以困難的方式完成,運行一個循環。但是,有沒有更簡單,無障礙的方法呢?像一些數據控制,會讓這種情況下的生活變得更容易一些? – Anchit 2010-08-27 14:33:22

相關問題