1、SqlDataAdapter简介
SqlDataAdapter 是 DataSet 和 SQL Server 之间的桥接器,用于检索和保存数据。它通过对数据源使用适当的 Transact-SQL 语句映射 Fill(它可更改 DataSet 中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet 中的数据)来提供这一桥接。
当 SqlDataAdapter 填充 DataSet 时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。但是,除非 MissingSchemaAction 属性设置为 AddWithKey,否则这个隐式创建的架构中不包括主键信息。也可以使用 FillSchema,让 SqlDataAdapter 创建 DataSet 的架构,并在用数据填充它之前就将主键信息包括进去。
2、构造函数
(1)public SqlDataAdapter ()
当创建 SqlDataAdapter 的实例时,下面的读/写属性将设置为以下初始值。
属性 |
初始值 |
MissingMappingAction 确定传入数据没有匹配的表或列时需要执行的操作。确定源表或源列中缺少映射时发生的操作 |
MissingMappingAction.Passthrough |
MissingSchemaAction 确定现有 DataSet 架构与传入数据不匹配时需要执行的操作。指定在将数据添加到 DataSet 而缺少要求的 DataTable 或 DataColumn 时要采取的操作。 |
MissingSchemaAction.Add |
可以通过单独调用属性来更改任何这些属性的值。
MissingMappingAction
成员名称 |
说明 |
Error |
如果缺少指定的列映射,则生成 InvalidOperationException。 |
Ignore |
忽略没有映射的列或表。返回 空引用(在 Visual Basic 中为 Nothing)。 |
Passthrough |
创建源列或源表,并使用其原始名称将其添加到 DataSet。 |
MissingSchemaAction
Add |
添加必需的列以完成架构。 |
Ignore |
忽略额外列。 |
Error |
如果缺少指定的列映射,则生成 InvalidOperationException。 |
AddWithKey |
添加必需的列和主键信息以完成架构。 有关如何将主键信息添加到 DataTable 的更多信息,请参见 FillSchema。为与用于 OLE DB 的 .NET Framework 数据提供程序一起正确运行,AddWithKey 要求本机 OLE DB 提供程序通过设置 DBPROP_UNIQUEROWS 属性获得必需的主键信息,然后通过检查 IColumnsRowset 中的 DBCOLUMN_KEYCOLUMN 确定哪些列是主键列。 作为一种备选方法,用户可以在每个 DataTable 上显式设置主键约束。 这将确保对与现有记录匹配的传入记录进行更新,而不是追加。 当使用 AddWithKey 时,用于 SQL Server 的 .NET Framework 数据提供程序将 FOR BROWSE 子句追加到正在执行的语句。 用户应该注意潜在的副作用,例如对 SET FMTONLY ON 语句的使用产生的干扰。 有关更多信息,请参见“SQL Server 联机丛书”。 |
(2)public SqlDataAdapter (SqlCommand selectCommand)
初始化 SqlDataAdapter 类的新实例,用指定的 SqlCommand 作为 SelectCommand 的属性。
(3)public SqlDataAdapter (string selectCommandText, SqlConnection selectConnection)
使用 SelectCommand 和 SqlConnection 对象初始化 SqlDataAdapter 类的新实例
(4)public SqlDataAdapter (string selectCommandText, string selectConnectionString)
用 SelectCommand 和一个连接字符串初始化 SqlDataAdapter 类的新实例
3、实现与数据源之间互通的属性
SelectCommand 属性
public SqlCommand SelectCommand { get; set; }
获取或设置一个 Transact-SQL 语句或存储过程,用于在数据源中选择记录。在 Fill 过程中使用的 SqlCommand,用来从数据库中为 DataSet 中的位置选择记录。
DeleteCommand 属性
public SqlCommand DeleteCommand { get; set; }
获取或设置一个 Transact-SQL 语句或存储过程,以从数据集删除记录
在 Update 过程中使用 SqlCommand,以在数据库中删除对应于 DataSet 中已删除行的记录。在 Update 过程中,如果未设置此属性而且 DataSet 中存在主键信息,那么在设置 SelectCommand 属性并使用 SqlCommandBuilder 的情况下,可以自动生成 DeleteCommand。然后,SqlCommandBuilder 将生成其他任何未设置的命令。此生成逻辑要求 DataSet 中存在键列信息
InsertCommand 属性和UpdateCommand 属性
与DeleteCommand 属性类似
4、填充DataSet数据集
public override int Fill (DataSet dataSet)
在 DataSet 中添加或刷新行以匹配使用 DataSet 名称的数据源中的行,并创建一个名为“Table”的 DataTable。
返回值:已在 DataSet 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。
public int Fill (DataSet dataSet, string srcTable)
在 DataSet 中添加或刷新行以匹配使用 DataSet 名称的数据源中的行,并创建一个名为“srcTable”的 DataTable。若省掉第二个参数时,默认把这个表从‘0’开始存储并命名为“Table”既有ds.Table[0]
5、更新数据源
public int Update (DataTable dataTable)
为指定 DataTable 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。
参数dataTable:用于更新数据源的 DataTable。返回值:DataSet 中成功更新的行数。
public int Update (DataSet dataSet, string srcTable)
为具有指定 DataTable 名称的 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。
public override int Update (DataSet dataSet)
为指定 DataSet 中每个已插入、已更新或已删除的行调用相应的 INSERT、UPDATE 或 DELETE 语句。
public DataTable FillSchema (DataTable dataTable, SchemaType schemaType)
根据指定的 SchemaType 配置指定 DataTable 的架构。
SchemaType枚举值
Source |
忽略 DataAdapter 上的任何表映射。使用传入架构配置 DataSet,而不应用任何转换。 |
Mapped |
将任何现有的表映射应用到传入架构。用转换的架构配置 DataSet。 |
备注
通常应将 SchemaType 设置为 Mapped,因为这样将使用任何已建立的表和列映射。
public override DataTable[] FillSchema(DataSet dataSet, SchemaType schemaType)
将名为“Table”的 DataTable 添加到指定的 DataSet 中,并根据指定的 SchemaType 配置架构以匹配数据源中的架构。dataSet要将架构插入其中的 DataSet