C#利用IDbDataAdapter/IDataReader实现通用数据集获取
作者:初九之潜龙勿用
关于数据集
在.net 应用中,与数据库进行连接并查询相关数据,填充到数据集是我们经常用到的功能,数据集的表现形式基本包括如下:
1、 DataSet
DataSet 是 ADO.NET 中的数据集合对象,可以通过 IDbDataAdapter 接口对象,其表示一组与命令有关的属性,用于填充 DataSet 和更新数据源。DataSet 相当于内存中的数据库,可以容纳复杂关系的数据,而且即使断开数据链路,依然可以继续独立的操作。生成的 DataSet 由一组 DataTable 对象组成,即数据表集合。
2、 DataReader
DataReader 也是数据集的一种形式,它与 DataSet 的区别在于,其只允许以只读、顺序向下的方式查看其中所存储的数据,高效和简单,是一种非常节省资源的数据对象,如果我们不考虑后续操作,只是显示数据,则 DataReader 对象几乎是首选。
生成数据集对象需要利用 ADO.NET 中的数据提供者对象包括IDbConnection、IDbCommand、IDbDataParameter等,如何使用这些对象请参考我的文章:
《C#实现 IDbConnection / IDbCommand 等相关通用数据接口》
本文将介绍如何通过利用IDbDataAdapter / IDataReader 实现通用数据集获取。
获取数据集的执行流程
首先需要创建连接对象,成功后下达符合对应数据库规范的命令指令,该指令可能包括需要的参数对象(需要定义名称和赋值等操作),通过数据适配器 IDbDataAdapter 接口对象填充到DataSet或通过命令对象() ExecuteReader 填充到 DataReader,大体流程如下图:
范例运行环境
操作系统: Windows Server 2019 DataCenter
.net版本: .netFramework4.7.1 或以上
开发工具:VS2019 C#
数据库:在这里我们以支持 Oracle 9i、MS SQL Server 2016、国产达梦数据 8 为例
通用对象的设计与实现
引用
在实现方法前请引用如下代码:
using System.Data; using System.Data.SqlClient; using System.Data.OracleClient; using Dm; using System.Collections;
GetDataAdapter方法
GetDataAdapter 方法返回 System.Data.IDbDataAdapter 数据适配器对象,其参数说明见下表:
序号 | 参数名 | 类型 | 说明 |
---|---|---|---|
1 | dbServerType | string | 目前支持 "oracle"、 "dm8",其它字符串均视为 MS SQL Server |
实现代码如下:
public System.Data.IDbDataAdapter GetDataAdapter(string dbservertype) { IDbDataAdapter adp = null; switch (dbservertype.ToLower()) { case "oracle": adp =new OracleDataAdapter(); break; case "dm8": adp = new DmDataAdapter(); break; default: adp =new SqlDataAdapter(); break; } return adp; }
获取数据集的设计与实现
GetDataSet方法
GetDataSet 方法返回 object 对象,如果生成成功则返回 DataSet 对象,失败则返回错误信息字符串,其参数说明见下表:
序号 | 参数名 | 类型 | 说明 |
---|---|---|---|
1 | DbServerType | string | 目前支持 "oracle"、 "dm8",其它字符串均视为 MS SQL Server |
2 | strConn | string | 对应数据库的连接字符串 |
3 | _sql | string | 要执行的SQL语句命令行 |
4 | paras | ArrayList | 要赋值的参数对象,逐个添加到ArrayList里,请注意参数为实体数据参数对象,如 MS SQL Server ,请传递如下代码: ArrayList.Add(new SqlParameter("参数名",参数值)); |
5 | ct | CommandType | System.Data.CommandType 枚举,可包括: StoredProcedure(存储过程) TableDirect(直接表查询) Text(文本查询)该值为默认值 |
有关 CommandType 的更多资料请参考如下链接:
https://learn.microsoft.com/zh-CN/dotnet/api/system.data.commandtype
实现代码如下:
public object GetDataSet(string DbServerType,string strConn,string _sql,ArrayList paras,CommandType ct) { System.Data.IDbConnection Conn=GetConnection(DbServerType,strConn); System.Data.IDbCommand Cmd=GetCommand(DbServerType,_sql,paras,Conn); Cmd.CommandType=ct; DataSet ds=new DataSet(); try { ds.EnforceConstraints=false; Conn.Open(); System.Data.IDbDataAdapter adp=GetDataAdapter(DbServerType); adp.SelectCommand=Cmd; adp.FillSchema(ds,System.Data.SchemaType.Mapped); adp.Fill(ds); return ds; } catch (Exception e) { return e.Message; } finally { if(Conn.State==ConnectionState.Open) { Conn.Close(); } } }
GetReaderData方法
GetReaderData 方法返回 IDataReader 对象,其参数说明见下表:
序号 | 参数名 | 类型 | 说明 |
---|---|---|---|
1 | DbServerType | string | 目前支持 "oracle"、 "dm8",其它字符串均视为 MS SQL Server |
2 | strConn | string | 对应数据库的连接字符串 |
3 | _sql | string | 要执行的SQL语句命令行 |
4 | paras | ArrayList | 要赋值的参数对象,逐个添加到ArrayList里,请注意参数为实体数据参数对象,如 MS SQL Server ,请传递如下代码: ArrayList.Add(new SqlParameter("参数名",参数值)); |
5 | ct | CommandType | System.Data.CommandType 枚举,可包括: StoredProcedure(存储过程) TableDirect(直接表查询) Text(文本查询)该值为默认值 |
有关 CommandType 的更多资料请参考如下链接:
https://learn.microsoft.com/zh-CN/dotnet/api/system.data.commandtype
实现代码如下:
public System.Data.IDataReader GetDataReader2(string DbServerType,string strConn,string _sql, ArrayList paras, CommandType ct) { System.Data.IDbConnection Conn = GetConnection(DbServerType, strConn); System.Data.IDbCommand Cmd = GetCommand(DbServerType, _sql, paras, Conn); Cmd.CommandType = ct; Cmd.Connection = Conn; Conn.Open(); return Cmd.ExecuteReader(); }
小结
有关更多关于数据接口对象请参考如下链接:
https://learn.microsoft.com/zh-CN/dotnet/api/system.data.idataadapter?view=netcore-3.1
IDbConnection 接口 (Microsoft.ReportingServices.DataProcessing) | Microsoft Learn
IDbConnection 接口 (Microsoft.ReportingServices.DataProcessing) | Microsoft Learn
到此这篇关于C#利用IDbDataAdapter/IDataReader实现通用数据集获取的文章就介绍到这了,更多相关C#通用数据集获取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!