C# 从2个不同的数据库、2个不同的表进行Linq到SQL批量更新
您好,我正在使用linq和sql创建一个windows SerService,如果表在过去5分钟内发生更改,它将更新某些行。这就是我所拥有的:C# 从2个不同的数据库、2个不同的表进行Linq到SQL批量更新,c#,sql,sql-server,linq-to-sql,C#,Sql,Sql Server,Linq To Sql,您好,我正在使用linq和sql创建一个windows SerService,如果表在过去5分钟内发生更改,它将更新某些行。这就是我所拥有的: using System; using System.Data.SqlClient; using System.Linq; namespace Prueba { internal static class Program { private static void Main() { int tienda = 9;
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为每个参数更新它
感谢您的时间因为它位于两个不同的表中,所以在不确切了解表设计的情况下,很难在第二个表中选择相应的行。但你可能可以这样做:
var cmd2 = new SqlCommand(
"update Info_Corp_Existencias set Existencia = (select field FROM Info_Existencias WHERE id=@otherid where sku ='" + x.SKU + "'" +
"AND Tienda =" + tienda, destination);
cmd2.ExecuteNonQuery();
因此,省去foreach语句,只需向数据库启动一个update语句,该语句将使用subselect更新每一行的字段,以从该行中获取正确的值
希望这有帮助。因此,您希望使用linq并对每一行执行update语句,而不是运行一条update语句吗?是,目前,它对每个语句都是这样做的,但我需要批量生成一些内容,以便只使用一个到数据库的连接,而不是使用foreach属性。遗憾的是,从foreach中删除语句会删除与x的关系,这就是我与表的关系。在windows服务中执行之前,我正在测试环境中执行此操作。当我的当前脚本更新时,如果表在过去5分钟内被修改,它会逐行更新。我需要它来进行批量更新。是的,我知道,这就是为什么我建议使用子查询。是否可以从子查询的第二个表中选择正确的行?