当前位置: 代码网 > it编程>编程语言>C# > C#利用IDbDataAdapter/IDataReader实现通用数据集获取

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

2024年11月25日 C# 我要评论
关于数据集在.net 应用中,与数据库进行连接并查询相关数据,填充到数据集是我们经常用到的功能,数据集的表现形式基本包括如下:1、 datasetdataset 是 ado.net 中的数据集合对象,

关于数据集

在.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#通用数据集获取内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • C# NModbus RTU通信实现方法详解

    modbus协议时应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络/串口和其它设备之间可以进行通信。它已经成为了一种工业标准。有了这个通信协议,不同的厂…

    2024年11月25日 编程语言
  • 在C#中使用指针的示例代码

    在C#中使用指针的示例代码

    .net平台定义了两种主要数据类型:值类型和引用类型,其实还有第三种数据类型:指针类型。使用指针,可以绕开clr的内存管理机制。(说明:在c#中使用指针,需要有... [阅读全文]
  • C#封装将函数封装为接口dll的简单步骤指南

    C#封装将函数封装为接口dll的简单步骤指南

    前言在c#中,将函数封装为接口并打包成dll(动态链接库)是一种非常常见的做法,用于实现代码的重用和模块化。以下是一个简单的步骤指南,教你如何实现这一点:1. ... [阅读全文]
  • C# winform实现自动更新

    C# winform实现自动更新

    1.检查当前的程序和服务器的最新程序的版本,如果低于服务端的那么才能升级2.服务端的文件打包.zip文件3.把压缩包文件解压缩并替换客户端的debug下所有文件... [阅读全文]
  • C#中6种常用集合类小结

    一.先来说说数组的不足也可以说集合与数组的区别1.数组是固定大小的,不能伸缩。虽然system.array.resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小…

    2024年11月25日 编程语言
  • C#文件内容检索的功能实现代码

    C#文件内容检索的功能实现代码

    为了构建一个高效的文件内容检索系统,我们需要考虑更多的细节和实现策略。以下是对之前技术方案的扩展,以及一个更详细的c# demo示例,其中包含索引构建、多线程处... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com