“填充数据集和查询数据”概述

更新:2007 年 11 月

用于执行 Transact-SQL 查询和用于填充数据集的典型 Visual Studio 机制是 TableAdapter。

可以使用 TableAdapter 或命令对象对数据源执行 SQL 语句或存储过程(例如 SqlCommand)。若要将数据加载到使用 Visual Studio 中的设计工具创建的数据集中,请使用 TableAdapter。若要将数据加载到以编程方式创建的数据集,请使用数据适配器。如果应用程序不使用数据集,可以使用命令对象直接对数据库执行 SQL 语句或存储过程。

有关更多信息

请参见

使用 TableAdapter 填充数据集

如何:使用数据填充数据集

TableAdapter

TableAdapter 概述

使用数据适配器填充数据集

从 DataAdapter 填充数据集 (ADO.NET)

填充数据集

如果用 Visual Studio 设计时工具(如数据集设计器数据源配置向导)创建数据集,则使用 TableAdapter 填充该数据集。TableAdapter 执行 SQL 语句或存储过程。

如果不是使用设计时工具创建数据集,则必须使用数据适配器填充和更新数据。(TableAdapter 不是 .NET Framework 3.5 中的实际类,因此它们不适用于不是使用设计时工具创建的数据集。) 有关使用 TableAdapter 或数据适配器将数据加载到数据集的更多信息,请参见 如何:使用数据填充数据集

TableAdapter 查询

可以执行 TableAdapter 查询以将数据填充到数据集中(更确切地说,是将数据加载到构成数据集的 DataTable 中)。可以使用“数据集设计器”中的 TableAdapter 查询配置向导 创建 TableAdapter 查询。TableAdapter 查询显示为 TableAdapter 上的指定方法,并通过调用 TableAdapter 方法执行。有关创建和执行 TableAdapter 查询的更多信息,请参见以下页:

Command 对象

使用命令对象可以直接对数据库执行 SQL 语句和存储过程,而不需要 DataSet、TableAdapter 或 DataAdapter。(术语“命令对象”是指您的应用程序正在使用的 .NET Framework 数据提供程序的特定命令。 例如,如果应用程序使用的是用于 SQL Server 的 .NET Framework 数据提供程序,则该命令对象为 SqlCommand。)

通过将数据命令的 CommandType 属性设置为 CommandType 枚举中的值之一,将命令配置为使用 SQL 语句或存储过程查询数据。将 CommandType 设置为 Text 以便执行 SQL 语句,或将它设置为 StoredProcedure 以便执行存储过程。然后,将 CommandText 属性设置为 SQL 语句或存储过程的名称。然后,通过调用数据命令的执行方法(ExecuteReader、ExecuteScalar、ExecuteNonQuery)之一执行该命令。

每个 .NET Framework 数据提供程序 (ADO.NET) 均提供一个为特定数据库进行了优化的命令对象。

使用数据命令,可在应用程序中进行以下操作:

  • 执行向您返回可以直接读取结果的“选择”(Select) 命令,而不是将结果加载到数据集内。若要读取结果,请使用数据读取器(OleDbDataReaderSqlDataReaderOdbcDataReaderOracleDataReader 对象),其工作方式与可将控件绑定到的只读、只进游标类似。这对于降低内存占用和非常快地加载只读数据的策略十分有用。

  • 执行数据库定义 (DDL) 命令以创建、编辑和移除表、存储过程及其他数据库结构。(当然您必须有执行这些操作的权限。)

  • 执行命令以获取数据库目录信息。

  • 执行动态 SQL 命令以更新、插入或删除记录,而不是更新数据集表然后将更改复制到数据库。

  • 执行返回标量值(即单个值,如聚合函数 SUM、COUNT、AVG 等的结果)的命令。

  • 执行从 SQL Server 数据库(版本 7.0 或更高版本)返回 XML 格式的数据的命令。典型的使用是执行一个查询并返回 XML 格式的数据,向其应用 XSLT 转换以将数据转换为 HTML,然后将结果发送给浏览器。

命令的属性包含对数据库执行命令所需的全部信息。这包括:

  • 一个连接   命令引用一个连接,使用它与数据库通信。

  • 命令的名称或文本   命令包含 SQL 语句的实际文本或要执行的存储过程的名称。

  • 参数   命令可能要求您随命令传递参数值(输入参数)。命令还可能以返回值或输出参数值的形式返回值。每个命令都有一个参数集合,您可分别设置或读取这些参数以传递或接收值。有关更多信息,请参见 如何:设置和获取命令对象的参数

您使用适于预期返回的结果的方法执行命令。例如,您预期返回几行,则调用命令的 ExecuteReader 方法,这将记录返回到数据读取器。如果您执行 UPDATE、INSERT 或 DELETE 命令,则调用命令的 ExecuteNonQuery 方法,这返回指示所影响的行数的值。如果执行聚合函数(如返回客户的订单计数),则调用 ExecuteScalar 方法。

多个结果集

命令对象的典型应用是返回单个数据表(一组行)。但是,命令可以执行返回多个结果集的过程。这可以不同方法实现。一种方法是命令引用返回多个结果集的存储过程。另一种方法是,命令可以包含两个(或多个)语句或存储过程名。在该情况下,这些语句或存储过程按顺序运行,并且一次调用返回多个结果集。

如果为一个命令指定多个语句或过程,它们的类型必须相同。例如,可以运行连续的 SQL 语句或连续的存储过程。但是,不能在同一个命令中混合存储过程调用和 SQL 语句。有关更多信息,请参见使用 DataReader 检索数据 (ADO.NET)

说明:

对于 Oracle,Oracle .NET Framework 数据提供程序不支持成批的 SQL 语句。但是,它允许您使用多个 REF CURSOR 输出参数来填充一个数据集,每个参数都位于其各自的数据表中。您必须定义这些参数,将它们标记为输出参数,并指出它们是 REF CURSOR 数据类型。注意,因为当执行 SQL 语句时,Oracle 不提供确定表名和列名所必需的信息,所以,当从 REF CURSOR 参数将 OracleDataAdapter 对象填充到存储过程时,您将无法使用 Update 方法。

安全性

在使用将 CommandType 属性设置为 Text 的数据命令时,将从客户端发送的信息传递到数据库前请仔细检查该信息。恶意用户可能会试图发送(插入)修改过的或其他 SQL 语句,以获得未经授权的访问或破坏数据库。在将用户输入内容传输到数据库之前,应始终确认这些信息是有效的。如果可能的话,请始终使用参数化查询或存储过程,这是最佳措施。

请参见

其他资源

数据访问入门

连接到 Visual Studio 中的数据

准备应用程序以接收数据

将数据获取到应用程序

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

在应用程序中编辑数据

验证数据

保存数据

数据资源