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

 更新时间:2024年11月04日 08:48:07   作者:初九之潜龙勿用  
这篇文章主要为大家详细介绍了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 数据适配器对象,其参数说明见下表:

序号参数名类型说明
1dbServerTypestring目前支持 "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 对象,失败则返回错误信息字符串,其参数说明见下表:

序号参数名类型说明
1DbServerTypestring目前支持 "oracle"、 "dm8",其它字符串均视为 MS SQL Server
2strConnstring对应数据库的连接字符串
3_sqlstring要执行的SQL语句命令行
4parasArrayList要赋值的参数对象,逐个添加到ArrayList里,请注意参数为实体数据参数对象,如 MS SQL Server ,请传递如下代码:
ArrayList.Add(new SqlParameter("参数名",参数值)); 
5ctCommandTypeSystem.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 对象,其参数说明见下表:

序号参数名类型说明
1DbServerTypestring目前支持 "oracle"、 "dm8",其它字符串均视为 MS SQL Server
2strConnstring对应数据库的连接字符串
3_sqlstring要执行的SQL语句命令行
4parasArrayList 要赋值的参数对象,逐个添加到ArrayList里,请注意参数为实体数据参数对象,如 MS SQL Server ,请传递如下代码:
ArrayList.Add(new SqlParameter("参数名",参数值)); 
5ctCommandTypeSystem.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#通用数据集获取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#实现MP3播放器功能的示例代码

    C#实现MP3播放器功能的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现MP3播放器功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以了解一下
    2022-12-12
  • C#统计C、C++及C#程序代码行数的方法

    C#统计C、C++及C#程序代码行数的方法

    这篇文章主要介绍了C#统计C、C++及C#程序代码行数的方法,较为详细的分析了C#统计文本文件的原理与相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#如何实现监控手机屏幕(附源码下载)

    C#如何实现监控手机屏幕(附源码下载)

    这篇文章主要介绍了C#如何实现监控手机屏幕(附源码下载),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • C#实现图书管理系统

    C#实现图书管理系统

    这篇文章主要为大家详细介绍了C#实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C#/VB.NET实现创建PDF/UA文件的示例代码

    C#/VB.NET实现创建PDF/UA文件的示例代码

    PDF/UA,即Universally Accessible PDF,该格式的PDF文件是于2012年8月以ISO标准14289-1发布的、具有普遍可访问的PDF文档标准。本文将用C#实现DF/UA文件的创建,需要的可以参考一下
    2022-08-08
  • C#中的delegate委托类型基本学习教程

    C#中的delegate委托类型基本学习教程

    这篇文章主要介绍了C#中的delegate委托类型基本学习教程,委托是C#语言所具有的一个重要特性,需要的朋友可以参考下
    2016-01-01
  • C#中倒计时功能的优化方法小结

    C#中倒计时功能的优化方法小结

    这篇文章主要为大家详细介绍了当C#重复使用一段代码倒计时时,如何使用普通类和静态方法,实现简单的代码封装性、可扩展性、可维护性,感兴趣的可以了解下
    2024-01-01
  • C# List生成Txt文档并且读取Txt文档封装List

    C# List生成Txt文档并且读取Txt文档封装List

    这篇文章主要介绍了C# List生成Txt文档并且读取Txt文档封装List,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • c# winform取消右上角关闭按钮的实现方法

    c# winform取消右上角关闭按钮的实现方法

    本文是对c#中winform取消右上角关闭按钮的实现方法进行了详细的介绍,需要的朋友可以过来参考下。希望对大家有所帮助
    2013-10-10
  • C#实现实时监控文件夹变化

    C#实现实时监控文件夹变化

    在开发各种应用程序时,我们经常需要对文件系统中的文件或文件夹进行实时监测,下面就跟随小编一起来看看具体如何使用C#实现这一功能吧
    2024-03-03

最新评论