【问题标题】:How can I save information to my database when information is to be saved in different tables?当信息要保存在不同的表中时,如何将信息保存到我的数据库中?
【发布时间】:2010-06-04 22:17:49
【问题描述】:

我必须将以下变量保存到数据库中:

        string PoliciaID = Session["username"];
        string PlacaAuto = Page.Request.QueryString["placaauto"];
        string Carnet = Page.Request.QueryString["carnet"];
        string Fecha = DateTime.Now;
        string TipoInfraccion = Page.Request.QueryString["tipo"];

PoliciaID 是另一个名为 Policia 的表的主键,而 Carnet 是名为 Persona 的表的主键。

在这种情况下如何使用 C# 保存信息?

感谢您的宝贵时间!

【问题讨论】:

  • 您使用的是什么数据库? SQL Server?

标签: c# sql database transactions


【解决方案1】:

两个 INSERT 或 UPDATE 命令,每个表一个,在事务上下文中作为单个工作单元执行。要么都成功,要么都失败并回滚。

This 可能会帮助您了解交易。

【讨论】:

  • 你能给我一个清楚的例子来说明什么是事务上下文吗?我已经对它进行了搜索,并发现了它理论上是什么——但我不知道如何在代码中应用它。再次感谢兄弟的帮助! :D
  • @Sergio - 请参阅下面的评论。 (我想保留格式,所以不只是在这里发表评论)
【解决方案2】:

正如@duffymo 所说

DECLARE @FirstTab TABLE (Col1 INT, Col2 INT)
DECLARE @SecondTab TABLE (Col3 INT, Col4 INT)

BEGIN TRANSACTION
BEGIN TRY
    INSERT INTO @FirstTab ( Col1, Col2 ) VALUES ( 1,2 )
    INSERT INTO @SecondTab ( Col3, Col4 ) VALUES ( 3,4 )
    COMMIT TRANSACTION 
END TRY 
BEGIN CATCH 
    ROLLBACK TRANSACTION
END CATCH 

(您可能还想添加一些机制来与调用者沟通它是成功(并提交更改)还是失败(回滚))

所以这里的想法是两个插入将都发生,或者都不发生。如果在此过程中抛出异常,它将跳转到catch 块以回滚已经完成的任何事情。但通常它只会执行两次 INSERTS,提交工作,然后继续。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多