ado.net 和人大金仓 Kdbndp 实现数据库无缝切换

接口类Ado
工具类AdoFactory

sqlserver类AdoSql

Kdbndp工具类AdoKd

这4个类实现sqlserver和人大金仓数据库无缝切换

接口类

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;

namespace Wind.ClassLibrary
{
    public interface Ado : IDisposable
    {
        string Key { set; get; }

        DbConnection Conn { set; get; }
        DbCommand Cmd { set; get; }
        DbDataAdapter Adapter { set; get; }
     
        DbTransaction Tran { set; get; }
        Ado SetCmd(string sql, Dictionary<string, object> dic, string tablename = null);
        void Open();
        /// <summary>
        /// 开始事务
        /// </summary>
        void BeginTransaction();
        /// <summary>
        /// 提交事务
        /// </summary>
        void Commit();
        /// <summary>
        /// 回滚事务
        /// </summary>
        void Rollback();
        DataSet GetDataSet(string sql, Dictionary<string, object> dic);
        /// <summary>
        /// 批量插入数据
        /// </summary>
        Message WriteToServer(string TableName, DataTable dt, bool errorSave = true, int Top = 20000);
        void Dispose();
    }
}

人大金仓ado实现

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Diagnostics;
using System.IO;
using System.Text;
using System.Threading;
using Kdbndp;
using KdbndpTypes;

namespace Wind.ClassLibrary
{
    /// <summary>
    /// 人大金仓数据库 KingbaseES 连接  "Server=localhost;Port=54321;UID=system;PWD=***;database=***"
    /// </summary>
    public class AdoKd : Ado
    {
        /// <summary>
        /// 实例化一个新的连接
        /// </summary>
        public static Ado NewAdo
        {
            get
            {
                var c = AdoFactory.GetConstr();
                var Conn = new KdbndpConnection(c);
                var m = new AdoKd()
                {
                    Conn = Conn,
                    Cmd = new KdbndpCommand()
                };
                m.Conn.Open();
                m.Cmd.Connection = m.Conn;
                m.Cmd.CommandTimeout = 60;
                m.SetStopwatch();
                return m;
            }
        }
        public string Key { set; get; }
        public static Ado NewAdo2(string key, string c = null)
        {
            if (c == null)
            {
                c = AdoFactory.GetConstr();
            }
            var Conn = new KdbndpConnection(c);
            var m = new AdoKd()
            {
                Key = key,
                Conn = Conn,
                Cmd = new KdbndpCommand()
            };
            m.Conn.Open();
            m.Cmd.Connection = m.Conn;
            m.SetStopwatch();
            return m;
        }
        /// <summary>
        /// 连接字符串格式  "Server=localhost;Port=54321;UID=system;PWD=****;database=***"
        /// </summary>
        public DbConnection Conn { set; get; }
        public DbCommand Cmd { set; get; }
        public DbDataAdapter Adapter { set; get; }
       
        public DbTransaction Tran { set; get; }
        public Ado SetCmd(string sql, Dictionary<string, object> dic, string tablename = null)
        {
            Open();
            Cmd.CommandTimeout = 3600;
            Cmd.CommandText = sql;
            Cmd.CommandType = sql.IndexOf(' ') == -1 ? CommandType.StoredProcedure : CommandType.Text;
            Cmd.Parameters.Clear();
            if (dic != null)
            {
                foreach (var item in dic)
                {
                    Cmd.Parameters.Add(new KdbndpParameter(item.Key, item.Value ?? DBNull.Value));
                    if ((item.Value != null && item.Value is byte[])
                        || (tablename != null && TType.IsImage(tablename, item.Key)))
                    {
                        Cmd.Parameters[item.Key].DbType = DbType.Binary;
                    }
                }
            }
            return this;
        }
        public void Open()
        {
            if (Conn.State == ConnectionState.Broken || Conn.State == ConnectionState.Closed)
            {
                Conn.Open();
            }
        }
        /// <summary>
        /// 开始事务
        /// </summary>
        public void BeginTransaction()
        {
            Open();
            Tran = Conn.BeginTransaction();
            Cmd.Transaction = Tran;
        }
        /// <summary>
        /// 提交事务
        /// </summary>
        public void Commit()
        {
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值