【问题标题】:ASP.NET SqlDataSource update and create FK referenceASP.NET SqlDataSource 更新和创建 FK 引用
【发布时间】:2010-05-26 20:09:04
【问题描述】:

简短版:

我有一个绑定到数据源的网格视图,该数据源有一个带有左连接的 SelectCommand,因为 FK 可以为空。在更新时,如果 FK 为空,我想在 FK 表中创建一条记录,然后使用新记录 ID 更新父表。这可能与 SqlDataSources 相关吗?

详细版本:

我有两个表:Company 和 Address。 Company.AddressId 列可以为空。在我的 ascx 页面上,我使用 SqlDataSource 来选择公司和地址的左连接,并使用 GridView 来显示结果。通过让 SqlDataSource 的 UpdateCommand 和 DeleteCommand 执行由分号分隔的两条语句,我可以使用 GridView 的编辑和删除功能同时更新两个表。

我遇到的问题是 Company.AddressId 为空。我需要做的是让数据源在 Address 表中创建一条记录,然后使用新的 Address.ID 更新 Company 表,然后像往常一样继续更新。为了一致性/简单性,如果可能的话,我想只使用数据源来做到这一点。是否可以让我的数据源执行此操作,或者向页面添加第二个数据源来处理其中的一些问题?

一旦我完成了这项工作,我可能会弄清楚如何让它与 InsertCommand 一起工作,但如果你正在努力并且对如何使该飞行有一个答案,那么请随时提供它。

谢谢。

【问题讨论】:

    标签: asp.net gridview sqldatasource


    【解决方案1】:

    执行两个由a分隔的语句 分号

    我看不出有什么理由不能像您在此处那样使用 SqlDataSource 在两个语句中同时执行 INSERT 和 UPDATE。

    但是,请注意,如果您有大量流量或同时使用该应用程序的用户,您可能会同时遇到问题,即一个用户所做的事情会影响另一个用户,并且意外结果可能会级联并搞砸你的数据。一般来说,对于你正在做的事情——涉及主键或外键的 INSERT 和 UPDATE,通常使用 SQL TRANSACTION。但是,您必须在 SQL 数据库上将它们作为 SQL 存储过程(或函数)执行。您仍然可以从 SqlDataSource 调用它们,但只需告诉它您正在调用存储过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 2019-11-25
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多