DataAdapter 对象
DataSet 对象 是 ADO.NET 中负责数据库与 DataSet 之间数据桥接的核心组件。它是「断开连接模式」的关键:本身不长期持有连接,只在填充和更新时短暂打开。
核心角色#
DataSet(内存数据) ←→ DataAdapter(桥梁) ←→ 数据库plaintext主要做两件事:
- Fill() —— 从数据库取数据,填充到 DataSet/DataTable
- 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 ServerOleDbDataAdapter—— OLE DB 数据源OdbcDataAdapter—— ODBC 数据源MySqlDataAdapter(第三方)等
注意事项#
- 手动写 Insert/Update/Delete 命令时,要用参数化查询(
@参数),不能字符串拼接,防止 SQL 注入 - 参数名与 DataTable 列名对应,如
@Name对应Name列 Fill()只负责取数,不会自动把 Schema 完全带回来(可用FillSchema()或MissingSchemaAction控制)- 现在新项目多改用 Dapper / EF Core,DataAdapter 主要出现在老项目维护和教学场景中
一句话总结:DataAdapter 是 DataSet 的”搬运工 + 同步器”——Fill 拉数据进内存,Update 把内存的改动批量写回数据库。