2010-08-27 51 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