CYQ.Data 支持 PostgreSQL 数据库

 

前言:

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

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

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

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

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

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

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

这里是找到的下载低版本支持的网址:

添加动态加载的代码:

复制代码
using System; using System.Collections.Generic; using System.Text; using System.Reflection; using System.Data.Common; using CYQ.Data.Cache; using System.IO;  namespace CYQ.Data {     internal class PostgreDal : DbBase     {         public PostgreDal(ConnObject co)             : base(co)         {          }         internal static Assembly 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 as Assembly;         }         protected override DbProviderFactory GetFactory(string providerName)         {             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
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信