0

简短版本:

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

详细版本:

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

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

一旦我完成了这项工作,我可能会弄清楚如何让它与 InsertCommand 一起工作,但是如果你在滚动并且有一个关于如何让它飞起来的答案,那么请随时提供它。

谢谢。

4

1 回答 1

0

执行由分号分隔的两条语句

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

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

于 2010-05-26T20:28:54.840 回答