📄 smarkdata.cs
字号:
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Data.Odbc;
using System.Data.OracleClient;
using System.Text.RegularExpressions;
// 开源协议:Apache License, Version 2.0
// Copyright © FanJianHan 2008
// mail:henryfan@msn.com
namespace Smark.Data
{
/// <summary>
/// 数据库设备描述接口
/// </summary>
public interface IDriver {
IDbConnection Connection {
get;
}
IDbDataAdapter DataAdapter(IDbCommand cmd);
IDbCommand Command {
get;
}
string ReplaceSql(string sql);
System.Data.IDataParameter CreateParameter(string name, object value, ParameterDirection direction);
}
/// <summary>
/// MSSQL数据库
/// </summary>
public class MSSQL : IDriver {
#region IDriver 成员
public IDbConnection Connection {
get { return new SqlConnection(); }
}
public IDbDataAdapter DataAdapter(IDbCommand cmd) {
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = (SqlCommand)cmd;
return da;
}
public IDbCommand Command {
get {
return new SqlCommand();
}
}
public string ReplaceSql(String sql) {
return sql.Replace("@", "@");
}
public IDataParameter CreateParameter(string name, object value, ParameterDirection direction) {
SqlParameter sp = new SqlParameter("@" + name, value);
if (value == null)
sp.Value = DBNull.Value;
sp.Direction = direction;
return sp;
}
#endregion
}
/// <summary>
/// ACCESS数据库
/// </summary>
public class MSAccess : IDriver {
#region IDriver 成员
public IDbConnection Connection {
get { return new OleDbConnection(); }
}
public IDbDataAdapter DataAdapter(IDbCommand cmd) {
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = (OleDbCommand)cmd;
return da;
}
public IDbCommand Command {
get {
return new OleDbCommand();
}
}
public string ReplaceSql(String sql) {
return sql.Replace("@", "@");
}
public IDataParameter CreateParameter(string name, object value, ParameterDirection direction) {
OleDbParameter sp = new OleDbParameter("@" + name, value);
sp.Direction = direction;
if (value == null)
sp.Value = DBNull.Value;
return sp;
}
#endregion
}
/// <summary>
/// ODBC数据库
/// </summary>
public class ODBC : IDriver {
#region IDriver 成员
public IDbConnection Connection {
get { return new OdbcConnection(); }
}
public IDbDataAdapter DataAdapter(IDbCommand cmd) {
OdbcDataAdapter da = new OdbcDataAdapter();
da.SelectCommand = (OdbcCommand)cmd;
return da;
}
public IDbCommand Command {
get { return new OdbcCommand(); }
}
public string ReplaceSql(string sql) {
return Regex.Replace(sql, "@[a-zA-z_0-9]+", "?", RegexOptions.IgnoreCase);
}
public IDataParameter CreateParameter(string name, object value, ParameterDirection direction) {
OdbcParameter op = new OdbcParameter();
op.ParameterName = "?";
op.Value = value;
if (value == null)
op.Value = DBNull.Value;
op.Direction = direction;
return op;
}
#endregion
}
/// <summary>
/// ORACLE数据库
/// </summary>
public class Oracle : IDriver {
#region IDriver 成员
public IDbConnection Connection {
get { return new OracleConnection(); }
}
public IDbDataAdapter DataAdapter(IDbCommand cmd) {
OracleDataAdapter da = new OracleDataAdapter();
da.SelectCommand =(OracleCommand)cmd;
return da;
}
public IDbCommand Command {
get { return new OracleCommand(); }
}
public string ReplaceSql(string sql) {
return sql.Replace("@", ":"); ;
}
public IDataParameter CreateParameter(string name, object value, ParameterDirection direction) {
OracleParameter op = new OracleParameter();
op.ParameterName = ":" + name;
op.Value = value;
if (value == null)
op.Value = DBNull.Value;
op.Direction = direction;
return op;
}
#endregion
}
/// <summary>
/// 数据处理对象
/// </summary>
public class DBContext {
static DBContext() {
DB = GetConfig("db");
DB1 = GetConfig("db1");
DB2 = GetConfig("db2");
DB3 = GetConfig("db3");
DB4 = GetConfig("db4");
DB5 = GetConfig("db5");
string type = GetConfig("dbtype");
if (type != null && type != string.Empty)
Driver = (IDriver)Activator.CreateInstance(Type.GetType(type));
type = GetConfig("dbtype1");
if (type != null && type != string.Empty)
Driver1 = (IDriver)Activator.CreateInstance(Type.GetType(type));
type = GetConfig("dbtype2");
if (type != null && type != string.Empty)
Driver2 = (IDriver)Activator.CreateInstance(Type.GetType(type));
type = GetConfig("dbtype3");
if (type != null && type != string.Empty)
Driver3 = (IDriver)Activator.CreateInstance(Type.GetType(type));
type = GetConfig("dbtype4");
if (type != null && type != string.Empty)
Driver4 = (IDriver)Activator.CreateInstance(Type.GetType(type));
type = GetConfig("dbtype5");
if (type != null && type != string.Empty)
Driver5 = (IDriver)Activator.CreateInstance(Type.GetType(type));
}
static string GetConfig(string tag) {
return System.Configuration.ConfigurationSettings.AppSettings[tag];
}
public static string DB {
get;
set;
}
public static string DB1 {
get;
set;
}
public static string DB2 {
get;
set;
}
public static string DB3 {
get;
set;
}
public static string DB4 {
get;
set;
}
public static string DB5 {
get;
set;
}
internal static IDriver Driver {
get;
set;
}
internal static IDriver Driver1 {
get;
set;
}
internal static IDriver Driver2 {
get;
set;
}
internal static IDriver Driver3 {
get;
set;
}
internal static IDriver Driver4 {
get;
set;
}
internal static IDriver Driver5 {
get;
set;
}
internal static ConnectionHandler CurrentHandler(string db)
{
if (HandlerTable.ContainsKey(db))
return HandlerTable[db];
return null;
}
[ThreadStatic]
static Dictionary<string, ConnectionHandler> mHandlerTable = new Dictionary<string, ConnectionHandler>();
internal static Dictionary<string, ConnectionHandler> HandlerTable {
get {
if (mHandlerTable == null)
mHandlerTable = new Dictionary<string, ConnectionHandler>();
return mHandlerTable;
}
}
internal static void AddConnectionHandler(string db,IDriver driver) {
IDbConnection conn = driver.Connection;
conn.ConnectionString = db;
conn.Open();
ConnectionHandler ch = new ConnectionHandler(conn);
ch.Driver = driver;
HandlerTable.Add(db, ch);
}
internal static void RemoveConnetionHandler(string db) {
if (HandlerTable.ContainsKey(db))
HandlerTable.Remove(db);
}
public static IConnectinContext Context {
get {
return new ConnectionContext(DB, Driver);
}
}
public static IConnectinContext Context1
{
get {
return new ConnectionContext(DB1, Driver1);
}
}
public static IConnectinContext Context2
{
get {
return new ConnectionContext(DB2, Driver2);
}
}
public static IConnectinContext Context3
{
get {
return new ConnectionContext(DB3, Driver3);
}
}
public static IConnectinContext Context4
{
get {
return new ConnectionContext(DB4, Driver4);
}
}
public static IConnectinContext Context5
{
get {
return new ConnectionContext(DB5, Driver5);
}
}
public static void Region(bool tran, Action<IConnectinContext> handler) {
using (IConnectinContext cc = Context) {
OnRegion(tran, cc, handler);
}
}
public static void Region1(bool tran,Action<IConnectinContext> handler) {
using (IConnectinContext cc = Context1) {
OnRegion(tran, cc, handler);
}
}
public static void Region2(bool tran,Action<IConnectinContext> handler) {
using (IConnectinContext cc = Context2) {
OnRegion(tran, cc, handler);
}
}
public static void Region3(bool tran,Action<IConnectinContext> handler) {
using (IConnectinContext cc = Context3) {
OnRegion(tran, cc, handler);
}
}
public static void Region4(bool tran,Action<IConnectinContext> handler) {
using (IConnectinContext cc = Context4) {
OnRegion(tran, cc, handler);
}
}
public static void Region5(bool tran,Action<IConnectinContext> handler) {
using (IConnectinContext cc = Context5) {
OnRegion(tran, cc, handler);
}
}
private static void OnRegion(bool tran, IConnectinContext cc, Action<IConnectinContext> handler) {
if (tran)
cc.BeginTransaction();
handler(cc);
if (tran)
cc.Commit();
}
public static void Region(Action<IConnectinContext> handler) {
Region(false, handler);
}
public static void Region1(Action<IConnectinContext> handler) {
Region1(false, handler);
}
public static void Region2(Action<IConnectinContext> handler) {
Region2(false, handler);
}
public static void Region3(Action<IConnectinContext> handler) {
Region3(false, handler);
}
public static void Region4(Action<IConnectinContext> handler) {
Region4(false, handler);
}
public static void Region5(Action<IConnectinContext> handler) {
Region5(false, handler);
}
}
/// <summary>
/// 命令处理对象
/// </summary>
public class Command {
public Command(string text) {
Text.Append(text);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -