您好,登录后才能下订单哦!
# ADO.NET DataSet数据填充方法是什么
## 一、DataSet概述
ADO.NET中的DataSet是内存中的数据缓存,它可以包含多个DataTable对象以及它们之间的关系。DataSet独立于数据源,这意味着它不直接与数据库交互,而是通过DataAdapter作为桥梁获取数据。这种设计使DataSet成为断开式数据访问模型的核心组件。
## 二、核心填充方法:DataAdapter.Fill()
### 2.1 基本语法
```csharp
DataSet ds = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(sqlCommand, connectionString);
adapter.Fill(ds); // 填充整个DataSet
DataAdapter提供多个Fill()重载方法:
- Fill(DataSet)
:填充整个DataSet
- Fill(DataSet, tableName)
:填充指定表名的DataTable
- Fill(DataTable)
:直接填充单个DataTable
- Fill(DataSet, startRecord, maxRecords, srcTable)
:分页填充
// 使用多个SELECT语句
string multiSql = "SELECT * FROM Customers; SELECT * FROM Orders";
SqlDataAdapter adapter = new SqlDataAdapter(multiSql, conn);
DataSet ds = new DataSet();
adapter.Fill(ds); // 自动生成Table1, Table2
// 指定表名
adapter.Fill(ds, "Customers");
adapter.Fill(ds, "Orders");
// 先获取架构信息
adapter.FillSchema(ds, SchemaType.Source);
// 再填充数据
adapter.Fill(ds);
SqlCommand cmd = new SqlCommand(
"SELECT * FROM Products WHERE CategoryID = @CategoryID", conn);
cmd.Parameters.AddWithValue("@CategoryID", 5);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
adapter.UpdateBatchSize = 50; // 设置批量操作大小
// 只获取前100条记录
adapter.Fill(ds, 0, 100, "Products");
// 添加类型映射规则
adapter.TableMappings.Add("Table", "Employees");
adapter.ColumnMappings.Add("EmployeeID", "ID");
try
{
adapter.Fill(ds);
}
catch (SqlException ex)
{
// 处理数据库异常
Console.WriteLine($"SQL Error: {ex.Message}");
}
catch (Exception ex)
{
// 处理其他异常
Console.WriteLine($"General Error: {ex.Message}");
}
// 查看生成的SQL命令
Console.WriteLine(adapter.SelectCommand.CommandText);
// 检查映射关系
foreach (DataTableMapping mapping in adapter.TableMappings)
{
Console.WriteLine($"{mapping.SourceTable} -> {mapping.DataSetTable}");
}
特性 | DataSet | DataReader |
---|---|---|
连接模式 | 断开式 | 连接式 |
数据访问 | 随机访问 | 只进只读 |
内存占用 | 较高 | 较低 |
更新能力 | 支持 | 不支持 |
DataSet更适合: - 需要操作多表关系的场景 - 需要灵活处理不同数据源的场景 - 遗留系统维护
DataSet ds = new DataSet();
// 加载客户数据
SqlDataAdapter custAdapter = new SqlDataAdapter(
"SELECT * FROM Customers", conn);
custAdapter.Fill(ds, "Customers");
// 加载订单数据
SqlDataAdapter orderAdapter = new SqlDataAdapter(
"SELECT * FROM Orders", conn);
orderAdapter.Fill(ds, "Orders");
// 建立关系
DataRelation relation = new DataRelation("CustOrder",
ds.Tables["Customers"].Columns["CustomerID"],
ds.Tables["Orders"].Columns["CustomerID"]);
ds.Relations.Add(relation);
DataSet的数据填充主要通过DataAdapter的Fill方法实现,其核心优势在于: 1. 提供断开式的数据访问模型 2. 支持复杂的数据关系和约束 3. 允许数据在内存中的灵活操作
随着ORM框架的普及,DataSet的使用场景有所减少,但在报表生成、数据交换等场景中仍具有不可替代的价值。掌握其数据填充方法对于维护传统ADO.NET应用至关重要。 “`
注:本文约1050字,采用Markdown格式编写,包含代码示例、比较表格等技术元素,符合技术文档规范。可根据需要调整代码示例的具体数据库类型(如将SqlDataAdapter改为OleDbDataAdapter等)。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。