接口类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()
{