⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smarkdata.cs

📁 smark.data是基于C#开发的轻量级数据访问组件。 提供以下功能封: 1)提供了跨数据库类型操作能力 2)基于程线存储的数据访问上下文对象
💻 CS
📖 第 1 页 / 共 3 页
字号:
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 + -