cyq.data mysql_CYQ.Data 支持 PostgreSQL 数据库

前言:

很久之前,就有同学问我CYQ.Data能不能支持下PostgreSQL,之后小做了下调查,发现这个数据库用的人少,加上各种因素,就一直没动手。

前两天,不小心看了一下Github上的消息:

52d1a185cba702f1452ed379bc8415bf.png

看到这个问题又被重新提了出来了,于是,闹吧!

下面分享一下支持该数据库要处理的过程,让大伙明白CYQ.Data要支持一种新的数据库,需要花多少功夫。

1、找到数据库的驱动程序:Npgsql.dll

网上查找了点相关知识,发现.NET 里操作PostgreSQL有两种提供的dll,一种是正规的收费的,另一种是开源的Npgsql.dll,因此这里选择了开源的。

在Nuget上可以搜索Npgsql,不过上面的版本要求依赖的版本很高,于是我找了最早的版本开始支持,毕竟CYQ.Data 是从支持最低2.0及以上的。

2、创建PostgreDal.cs,实现动态加载DLL

487aeb98d4e2a3c84cb10bba7e256760.png

添加动态加载的代码:

usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Reflection;usingSystem.Data.Common;usingCYQ.Data.Cache;usingSystem.IO;namespaceCYQ.Data

{internal classPostgreDal : DbBase

{publicPostgreDal(ConnObject co)

:base(co)

{

}internal staticAssembly GetAssembly()

{object ass = CacheManage.LocalInstance.Get("Postgre_Assembly");if (ass == null)

{try{string name = string.Empty;if (File.Exists(AppConst.RunFolderPath + "Npgsql.dll"))

{

name= "Npgsql";

}else{

name= "Can't find the Npgsql.dll";

Error.Throw(name);

}

ass=Assembly.Load(name);

CacheManage.LocalInstance.Set("Postgre_Assembly", ass, 10080);

}catch(Exception err)

{string errMsg =err.Message;

Error.Throw(errMsg);

}

}return ass asAssembly;

}protected override DbProviderFactory GetFactory(stringproviderName)

{object factory = CacheManage.LocalInstance.Get("Postgre_Factory");if (factory == null)

{

Assembly ass=GetAssembly();

factory= ass.GetType("Npgsql.NpgsqlFactory").GetField("Instance").GetValue(null);//factory = ass.CreateInstance("Npgsql.NpgsqlFactory.Instance");

if (factory == null)

{throw new System.Exception("Can't Create NpgsqlFactory in Npgsql.dll");

}else{

CacheManage.LocalInstance.Set("Postgre_Factory", factory, 10080);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值