将DataReader转化为DataTables的一个简单实现
许多将DataReader转化为DataTables或DataSet的实现,通常是通过循环遍历的办法。现在有一个更为简单的办法,利用 DbDataAdapter类,所有provider的DataAdapters都继承自它。它包含一个Fill方法,需要传入一个 IDataReader参数。我们可以建立一个继承自它的类来调用这个方法。非常轻松的将一个DataReader转换成一个DataTable。不过同时还须覆盖其他一些抽象方法。见如下代码:
1using System;
2using System.Data;
3using System.Data.Common;
4
5namespace Midapex.SmartOrm
6{
7 class DataReaderAdapter: DbDataAdapter
8 {
9 public int FillFromReader(DataTable dataTable, IDataReader dataReader)
10 {
11 return this.Fill(dataTable, dataReader);
12 }
13
14 //需要覆盖下面一些方法
15 protected override RowUpdatedEventArgs CreateRowUpdatedEvent(
16 DataRow dataRow,
17 IDbCommand command,
18 StatementType statementType,
19 DataTableMapping tableMapping
20 ) { return null; }
21
22 protected override RowUpdatingEventArgs CreateRowUpdatingEvent(
23 DataRow dataRow,
24 IDbCommand command,
25 StatementType statementType,
26 DataTableMapping tableMapping
27 ) { return null; }
28
29 protected override void OnRowUpdated(
30 RowUpdatedEventArgs value
31 ) { }
32 protected override void OnRowUpdating(
33 RowUpdatingEventArgs value
34 ) { }
35 }
36}
具体使用中可以实例化这个类,调用这个方法进行转化,非常简单。
主要参考翻译自:http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=628
1using System;
2using System.Data;
3using System.Data.Common;
4
5namespace Midapex.SmartOrm
6{
7 class DataReaderAdapter: DbDataAdapter
8 {
9 public int FillFromReader(DataTable dataTable, IDataReader dataReader)
10 {
11 return this.Fill(dataTable, dataReader);
12 }
13
14 //需要覆盖下面一些方法
15 protected override RowUpdatedEventArgs CreateRowUpdatedEvent(
16 DataRow dataRow,
17 IDbCommand command,
18 StatementType statementType,
19 DataTableMapping tableMapping
20 ) { return null; }
21
22 protected override RowUpdatingEventArgs CreateRowUpdatingEvent(
23 DataRow dataRow,
24 IDbCommand command,
25 StatementType statementType,
26 DataTableMapping tableMapping
27 ) { return null; }
28
29 protected override void OnRowUpdated(
30 RowUpdatedEventArgs value
31 ) { }
32 protected override void OnRowUpdating(
33 RowUpdatingEventArgs value
34 ) { }
35 }
36}
具体使用中可以实例化这个类,调用这个方法进行转化,非常简单。
主要参考翻译自:http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=628
分类:
Utils Collection
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构