代码之家  ›  专栏  ›  技术社区  ›  Mark Wilkins

如何在Visual Studio中为TableAdapter对象创建刷新语句?

  •  1
  • Mark Wilkins  · 技术社区  · 16 年前

    我正在开发一个ADO.NET数据提供程序和一个相关的DDEX提供程序。我无法说服Visual Studio TableAdapater配置向导生成SQL语句,以便在插入和更新之后刷新数据表。它生成insert和delete语句,但不会生成select语句来执行刷新。

    通过将表从服务器资源管理器(在Visual Studio中)拖放到数据集(例如DataSet1.xsd)上,可以访问引用的功能。它创建一个TableAdapter对象并配置SELECT、UPDATE、DELETE和INSERT语句。如果右键单击TableAdapter对象,则上下文菜单中有一个“配置”选项,用于启动TableAdapter配置向导。该向导的第一个对话框有一个“高级选项”按钮,该按钮指向一个名为“刷新数据表”的选项。当与SQL Server表一起使用时,该选项会导致在TableAdapters InsertCommand和UpdateCommand命令的末尾添加select field1,field2形式的语句。

    您知道为了使Visual Studio将这些刷新语句添加到update/insert命令中,可能需要从DDEX提供程序(或ADO.NET数据提供程序)公开哪些类型的属性或接口吗?

    Advanced SQL Generation Options Dialog Box 有一条注释指出,只有支持SQL语句批处理的数据库才支持刷新数据表。这似乎意味着.NET数据提供程序可能需要公开某些表示支持此类行为的属性。但我找不到。有什么想法吗?

    1 回复  |  直到 16 年前
        1
  •  0
  •   this. __curious_geek    16 年前

    TableAdapter中的刷新功能意味着TableAdapter操作的关联数据表将在操作完成后更新数据。

    如果调用tableadapter的insert方法并为insert操作传递datarow或datatable,那么tableadapter将刷新datatable/datarow以反映insert操作之后数据库中的最新值。如果数据库中的表为要插入的给定行的insert命令生成了唯一的id或自动编号,则原始数据行的p.key列将反映来自数据库的自动生成id值。如果您在向导配置中将refresh选项设置为true,tableadapter将负责此刷新。

    现在这个“刷新”tableadapter将在一个批处理中执行2个查询,首先是Insert,然后是select和scope\u标识。

    INSERT INTO Table (coloumns) VALUES (values);
    

    但是,如果在TableAdapter上打开Refresh,我的默认Insert命令将触发这些SQL语句批处理。作为Insert()的参数传递的数据行也将在成功执行后更新。

    INSERT INTO Table (coloumns) VALUES (values);
    
    SELECT coloumns FROM Table WHERE (PKeyID = SCOPE_IDENTITY())