2017-06-13 53 views
0

您好我正在使用linq和sql来创建一个窗口serrvice更新一些行,如果在过去的5分钟内迄今表中有变化,这是什么我有:从2个不同的数据库,2个不同的表Linq到SQL bulkupdate

using System; 
using System.Data.SqlClient; 
using System.Linq; 
namespace Prueba 
{ 
internal static class Program 
{ 
    private static void Main() 
    { 
     int tienda = 9; 

     var conex = new DataClasses1DataContext(); 
     try 
     { 
      var source = 
       new SqlConnection(
        "Server=LAPTOP-VCD9V9KH\\SQLEXPRESS;Database=backoffice;User Id=sa; Password=root;"); 

      var destination = 
       new SqlConnection(
        "Server=LAPTOP-VCD9V9KH\\SQLEXPRESS;Database=Corporativo_PRB;User Id=sa; Password=root;"); 
      source.Open(); 
      destination.Open(); 
      source.CreateCommand(); 
      var infoExistenciases = conex.Info_Existencias.Where(x => x.FechAct > DateTime.Now.AddMinutes(-5)); 

      foreach (var x in infoExistenciases) 
      { 

       var cmd2 = new SqlCommand(
        "update Info_Corp_Existencias set Existencia =" + x.Existencia + " where sku ='" + x.SKU + "'" + 
        "AND Tienda =" + tienda, destination); 
       cmd2.ExecuteNonQuery(); 
      } 

      source.Close(); 
      destination.Close(); 
      Console.Beep(); 
     } 
     catch 
      (Exception e) 
     { 
      Console.WriteLine(e); 
      Console.ReadLine(); 
      throw; 
     } 
    } 
} 

}

到目前为止,该代码更新目标服务器的一切,但我真的不能真正找准下来怎么把一切到一个临时表,让LINQ更新它的foreach参数。

谢谢您的时间

+0

因此,不是运行一个更新语句,而是想要使用linq并为每一行执行update-statement? –

+0

是的,目前它为每个语句都这样做,但我需要生成一些批量使用一个连接到数据库,而不是使用foreach属性。 – Darkpaladin

回答

0

因为它是在两个不同的表,这是难以选择在第二个表中的对应行不知道表的设计完全相同。但你也许可以做这样的事情:

var cmd2 = new SqlCommand(
       "update Info_Corp_Existencias set Existencia = (select field FROM Info_Existencias WHERE [email protected] where sku ='" + x.SKU + "'" + 
       "AND Tienda =" + tienda, destination); 
      cmd2.ExecuteNonQuery(); 

所以离开了foreach语句,只是推出一个更新语句,将通过使用子查询,以得到该行的正确的值更新每一行的字段中输入数据库。

希望这会有所帮助。

+0

不幸的是,从foreach中移除声明会删除与x的关系,这是我与我的表格的关系。在做windows服务之前,我在测试环境中进行测试。 虽然我当前的脚本更新,如果表在过去的5分钟内修改它,它逐行进行。我有点需要它来做一个bulkupdate。 – Darkpaladin

+0

是的,我知道,这就是为什么我建议使用子查询。是否有可能从子查询的第二个表中选择正确的行? –

相关问题