Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何同时插入到两个表中?_C#_Asp.net_Sql - Fatal编程技术网

C# 如何同时插入到两个表中?

C# 如何同时插入到两个表中?,c#,asp.net,sql,C#,Asp.net,Sql,我有用户表和线程表。我想将@Reputation插入users表,将@winingComment插入threads表!!如何实现这一点?您将需要执行两个独立的插入语句,因为您不能同时将数据插入两个表。您将需要执行两个独立的插入语句,因为您不能同时将数据插入两个表。您不能。不管你怎么看,它们都必须是两种说法。您可以使用触发器来模拟执行单个插入操作的感觉,但这会产生相当糟糕的代码味道 如果只想在单个命令上发送语句,请使用分号终止第一个命令,并将其作为一个批发送到SqlCommand Stri

我有用户表和线程表。我想将@Reputation插入users表,将@winingComment插入threads表!!如何实现这一点?

您将需要执行两个独立的
插入
语句,因为您不能同时将数据插入两个表。

您将需要执行两个独立的
插入
语句,因为您不能同时将数据插入两个表。

您不能。不管你怎么看,它们都必须是两种说法。您可以使用触发器来模拟执行单个
插入操作的感觉,但这会产生相当糟糕的代码味道

如果只想在单个命令上发送语句,请使用分号终止第一个命令,并将其作为一个批发送到
SqlCommand

    StringBuilder sb = new StringBuilder();
sb.Append("INSERT INTO Threads(");//How can i modify that statement
sb.Append(" SELECT @Repuation, @WiningComment");
sb.Append(" FROM Users AS u");
sb.Append(" INNER JOIN Threads AS t ON t.UsersID=u.UsersID");
sb.Append(" WHERE t.ThreadsID=@ThreadID");

你不能。不管你怎么看,它们都必须是两种说法。您可以使用触发器来模拟执行单个
插入操作的感觉,但这会产生相当糟糕的代码味道

如果只想在单个命令上发送语句,请使用分号终止第一个命令,并将其作为一个批发送到
SqlCommand

    StringBuilder sb = new StringBuilder();
sb.Append("INSERT INTO Threads(");//How can i modify that statement
sb.Append(" SELECT @Repuation, @WiningComment");
sb.Append(" FROM Users AS u");
sb.Append(" INNER JOIN Threads AS t ON t.UsersID=u.UsersID");
sb.Append(" WHERE t.ThreadsID=@ThreadID");

我建议您在交易中进行两次单独插入

new SqlCommand("INSERT INTO Table1 (ID) SELECT 1; INSERT INTO Table2 (SomeField) SELECT 'Some value.';", some_db_connection).ExecuteNonQuery();

从技术上讲,事务保证了您请求的原子性。

我建议您在事务中进行两次单独的插入

new SqlCommand("INSERT INTO Table1 (ID) SELECT 1; INSERT INTO Table2 (SomeField) SELECT 'Some value.';", some_db_connection).ExecuteNonQuery();

从技术上讲,事务保证了请求的原子性。

我认为您只需要执行两个独立的INSERT语句。如果您想确保这是一个原子操作(要么两者都插入,要么两者都不插入),那么您可以将它们包装到事务中。提交事务时,插入将同时完成

希望有帮助


John

我想你只需要做两个独立的INSERT语句。如果您想确保这是一个原子操作(要么两者都插入,要么两者都不插入),那么您可以将它们包装到事务中。提交事务时,插入将同时完成

希望有帮助


John

使用Sql 2008的Merge语句可能有助于在多个表中执行操作

请检查一下


使用Sql 2008的Merge语句可能有助于在多个表中执行操作

请检查一下


因此,我可以向sb追加另一条insert语句。。然后把它交给SQLcommand来执行?!?我建议先执行第一条SQL语句,然后对第二条语句使用
sb
,然后再执行它。@Matrix001:是的。看看我的答案@Neil是对的-它们必须是两个不同的语句。那么我可以在sb中附加另一个insert语句吗。。然后把它交给SQLcommand来执行?!?我建议先执行第一条SQL语句,然后对第二条语句使用
sb
,然后再执行它。@Matrix001:是的。看看我的答案@Neil是对的-它们必须是两个不同的语句。不幸的是,不能在一个查询中同时插入两个表。您可以一次性运行查询批处理。。因此,多个插入但以批处理方式执行-这两个表是否由foeriegn键链接-从上面的查询中不清楚关系是如何定义的?同时,您的意思是这两个插入一起是一个原子操作?可能是重复的。不幸的是,您不能在一个查询中同时插入两个表。您可以一次性运行查询批处理。。因此,多个插入但以批处理方式执行-这两个表是否由foeriegn键链接-从上面的查询中不清楚关系是如何定义的?同时,您的意思是两个插入一起是一个原子操作?这种方式可能重复您确信两个插入都会发生,如果另一个失败,则不只是其中一个。这样,您可以确保两个插入都会发生,如果另一个失败,则不只是其中一个插入。