前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# 利用IDbDataAdapter / IDataReader 实现通用数据集获取

C# 利用IDbDataAdapter / IDataReader 实现通用数据集获取

作者头像
初九之潜龙勿用
发布2024-06-20 13:24:13
1140
发布2024-06-20 13:24:13
举报
文章被收录于专栏:技术文章

关于数据集

在.net 应用中,与数据库进行连接并查询相关数据,填充到数据集是我们经常用到的功能,数据集的表现形式基本包括如下:

1、 DataSet

代码语言:txt
复制
  DataSet 是 ADO.NET 中的数据集合对象,可以通过 IDbDataAdapter 接口对象,其表示一组与命令有关的属性,用于填充 DataSet 和更新数据源。DataSet 相当于内存中的数据库,可以容纳复杂关系的数据,而且即使断开数据链路,依然可以继续独立的操作。生成的 DataSet 由一组 DataTable 对象组成,即数据表集合。

2、 DataReader

代码语言:txt
复制
  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 为例

通用对象的设计与实现

引用

在实现方法前请引用如下代码:

代码语言:javascript
复制
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

实现代码如下:

代码语言:javascript
复制
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

strConn

string

对应数据库的连接字符串

2

_sql

string

要执行的SQL语句命令行

3

paras

ArrayList

要赋值的参数对象,逐个添加到ArrayList里,请注意参数为实体数据参数对象,如 MS SQL Server ,请传递如下代码: ArrayList.Add(new SqlParameter("参数名",参数值));

ct

CommandType

System.Data.CommandType 枚举,可包括: StoredProcedure(存储过程) TableDirect(直接表查询) Text(文本查询)该值为默认值

有关 CommandType 的更多资料请参考如下链接:

https://learn.microsoft.com/zh-CN/dotnet/api/system.data.commandtype?view=netcore-3.1

实现代码如下:

代码语言:javascript
复制
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

strConn

string

对应数据库的连接字符串

2

_sql

string

要执行的SQL语句命令行

3

paras

ArrayList

要赋值的参数对象,逐个添加到ArrayList里,请注意参数为实体数据参数对象,如 MS SQL Server ,请传递如下代码: ArrayList.Add(new SqlParameter("参数名",参数值));

ct

CommandType

System.Data.CommandType 枚举,可包括: StoredProcedure(存储过程) TableDirect(直接表查询) Text(文本查询)该值为默认值

有关 CommandType 的更多资料请参考如下链接:

https://learn.microsoft.com/zh-CN/dotnet/api/system.data.commandtype?view=netcore-3.1

实现代码如下:

代码语言:javascript
复制
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

后续我们将继续介绍如何利用通用接口方法执行数据库脚本的操作,感谢您的阅读,希望本文能够对您有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 获取数据集的执行流程
  • 范例运行环境
  • 通用对象的设计与实现
    • 引用
      • GetDataAdapter方法
      • 获取数据集的设计与实现
        • GetDataSet方法
          • GetReaderData方法
          • 小结
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档