SQL_SqlDataAdapter 类说明

来源:互联网 发布:qq同步助手 for mac 编辑:程序博客网 时间:2024/05/22 17:44

表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。无法继承此类。

SqlDataAdapterDataSet 和 SQL Server 之间的桥接器,用于检索和保存数据。SqlDataAdapter 通过对数据源使用适当的 Transact-SQL 语句映射 Fill(它可更改 DataSet 中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet 中的数据)来提供这一桥接。更新是逐行进行的。对于每个已插入、修改和删除的行,Update 方法会确定已对其执行的更改的类型(InsertUpdateDelete)。根据更改类型,执行 InsertUpdateDelete 命令模板将已修改的行传播给数据源。当 SqlDataAdapter 填充 DataSet 时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。但是,除非 MissingSchemaAction 属性设置为 AddWithKey,否则这个隐式创建的架构中不包括主键信息。也可以使用 FillSchema,让 SqlDataAdapter 创建 DataSet 的架构,并在用数据填充它之前就将主键信息包括进去。

SqlDataAdapterSqlConnectionSqlCommand 一起使用,以便在连接到 SQL Server 数据库时提高性能。

说明:

如果使用 SQL Server 存储过程编辑或删除使用 DataAdapter 的数据,请确保不要在存储过程定义中使用 SET NOCOUNT ON。这将导致返回的受影响行数为零,DataAdapter 将其解释为并发冲突。这种情况下将引发 DBConcurrencyException

SqlDataAdapter 还包括 SelectCommandInsertCommandDeleteCommandUpdateCommandTableMappings 属性,以便于数据的加载和更新。

当创建 SqlDataAdapter 的实例时,读/写属性将被设置为初始值。有关这些值的列表,请参见 SqlDataAdapter 构造函数。

InsertCommandDeleteCommandUpdateCommand 是泛型模板,通过参数机制由来自每个修改行的各个值自动填充。

对于传播给 Update 上的数据源的每一列,应向 InsertCommandUpdateCommandDeleteCommand 添加一个参数。DbParameter 对象的 SourceColumn 属性将被设置为列的名称。此设置指示该参数值并非手动设置,而是获取自当前处理的行中的特定列。

 

private static DataSet SelectRows(DataSet dataset,
    string connectionString,string queryString)
{
    using (SqlConnection connection =
        new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(
            queryString, connection);
        adapter.Fill(dataset);
        return dataset;
    }
}