“高级 SQL 生成选项”对话框

更新:2007 年 11 月

允许您控制为适配器创建 SQL 语句或存储过程的方式。在一个数据向导的“SQL 语句”页中单击“高级选项”按钮时,出现此对话框。该对话框中的所有选项都与作为更新过程一部分而调用的语句或过程有关(例如 CustomersTableAdapter.Update(DataTable))。

用户界面元素列表

  • 生成 Insert、Update 和 Delete 语句
    选中此选项后,向导将为适配器的 UpdateCommand、InsertCommand 和 DeleteCommand 对象创建 SQL 语句或存储过程。(所生成的语句或过程的具体内容由向导的“选择查询类型”窗格来控制。) 如果清除此复选框,则将禁用该对话框中的其他选项,因为它们不适用。

    通常在以下情形下清除此复选框:

    • 适配器仅用于从数据源读取数据,而不用于将数据写回数据源。通过清除此框,可以减少窗体或组件中的代码数量。

    • 您要在完成向导之后自己填充这些命令。

    如果该框被清除并且没有任何用于 UpdateCommand、InsertCommand 或 DeleteCommand 对象的语句或存储过程,则调用数据适配器的 Update 方法不会执行任何操作。

  • 使用开放式并发
    选中此选项后,向导将生成 SQL 命令,其中 WHERE 子句将要更新的记录中每一列的值与数据库中的相应记录进行匹配。

    说明:

    仅当选中了“生成 Insert、Update 和 Delete 命令”复选框时,此选项才可用。

    例如,使用该选项生成的 Update 语句的语法可以是:

    UPDATE Customers
    SET CustomerID = ?, CompanyName = ?, Phone = ?
    WHERE (CustomerID = ?) AND (CompanyName = ?) AND 
          (Phone = ? OR ? IS NULL AND Phone IS NULL);
    

    如果此复选框被清除,则语法可能是:

    UPDATE Customers
    SET CustomerID = ?, CompanyName = ?, Phone = ?
    WHERE (CustomerID = ?)
    

    检查每一列值的效果是如果某列已经更改,则该命令将失败(如果自从将记录读入数据集后该记录已由另一用户更改,则会出现这种情况)。如果未设置此选项,并且 WHERE 子句恰好定位到该记录,则另一用户所做的更改将可能被您的更新重写而不会显示任何警告。

    有关在从数据集更新时执行并发检查的更多信息,请参见 介绍 ADO.NET 中的数据并发

  • 刷新数据表
    选中此选项后,向导将为每个 Update 和 Insert 命令生成一个 Select 语句。

    说明:

    仅当选中了“生成 Insert、Update 和 Delete 命令”复选框时,此选项才可用。

    Select 语句被添加到适配器中相应的命令对象中,并在 Update 或 Insert 命令完成后立即执行。Select 语句被配置为仅返回一个记录,即刚经过更新的记录的更新版本。

    说明:

    可以向适配器的命令对象的 CommandText 属性添加多条语句,各语句之间用分号 (;) 分隔。

    获取记录的新版本时将把该记录经过更新的列值写入到数据集中,这些列包括:

    • 数据库用默认值填充的列。

    • 自动增加的列。

    • 时间戳列。

    • 受到数据库触发器的结果影响的列。

    由于此选项导致每次更新时要执行两条语句(即 Update 语句和随后的 Select 语句),因此在更新数据集中的大多数记录时可能效率不高。在这种情况下,在执行完所有更新后简单地一次性重新填充整个数据表效率会更高。

    说明:

    仅在支持 SQL 语句批处理的数据库上才支持刷新数据表。例如,Microsoft Access 不能在执行其他操作的命令中刷新数据表。

请参见

概念

数据中的新增功能

“显示数据”概述

其他资源

数据演练

连接到 Visual Studio 中的数据

准备应用程序以接收数据

将数据获取到应用程序

在 Windows 应用程序中的窗体上显示数据

在应用程序中编辑数据

验证数据

保存数据