lin

返回

DataSet 对象 是 ADO.NET 中负责数据库与 DataSet 之间数据桥接的核心组件。它是「断开连接模式」的关键:本身不长期持有连接,只在填充和更新时短暂打开。

核心角色#

DataSet(内存数据)  ←→  DataAdapter(桥梁)  ←→  数据库
plaintext

主要做两件事:

  1. Fill() —— 从数据库取数据,填充到 DataSet/DataTable
  2. Update() —— 把 DataSet 中的修改(增/删/改)批量提交回数据库

四大命令(核心属性)#

DataAdapter 内部封装了四个 Command 对象,分别对应增删改查:

属性用途
SelectCommand查询数据(Fill 时使用)
InsertCommand新增行时执行
UpdateCommand修改行时执行
DeleteCommand删除行时执行

Update 时它会遍历 DataTable 中每行的 RowState(Added / Modified / Deleted),自动调用对应的命令。前三个命令不会自动从 SelectCommand 推断,需要手动配置或使用 SqlCommandBuilder 自动生成:

var builder = new SqlCommandBuilder(adapter); // 需 SelectCommand 是简单单表查询
csharp

基本用法(C# 示例)#

using (var conn = new SqlConnection(connStr))
{
    var adapter = new SqlDataAdapter("SELECT Id, Name FROM Users", conn);

    // 填充
    var ds = new DataSet();
    adapter.Fill(ds, "Users");

    // 离线修改
    DataTable table = ds.Tables["Users"];
    table.Rows[0]["Name"] = "李四";                     // 修改
    table.Rows.Add(null, "王五");                        // 新增
    table.Rows[1].Delete();                              // 删除

    // 批量提交回数据库
    adapter.Update(ds);
}
csharp

常见类型#

  • SqlDataAdapter —— SQL Server
  • OleDbDataAdapter —— OLE DB 数据源
  • OdbcDataAdapter —— ODBC 数据源
  • MySqlDataAdapter(第三方)等

注意事项#

  • 手动写 Insert/Update/Delete 命令时,要用参数化查询(@参数),不能字符串拼接,防止 SQL 注入
  • 参数名与 DataTable 列名对应,如 @Name 对应 Name 列
  • Fill() 只负责取数,不会自动把 Schema 完全带回来(可用 FillSchema() 或 MissingSchemaAction 控制)
  • 现在新项目多改用 Dapper / EF Core,DataAdapter 主要出现在老项目维护和教学场景中

一句话总结:DataAdapter 是 DataSet 的”搬运工 + 同步器”——Fill 拉数据进内存,Update 把内存的改动批量写回数据库。

DataAdapter 对象
作者 lin
发布于 2026年10月17日

留言

无需登录,留下你的想法。

0
昵称颜色
可见范围