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

📄 smarkdata.cs

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

        private System.Text.StringBuilder mText = new System.Text.StringBuilder();
        public System.Text.StringBuilder Text {
            get {
                return mText;
            }

        }
        private CommandType mCommandType = CommandType.Text;
        public CommandType CommandType {
            get {
                return mCommandType;
            }
            set {
                mCommandType = value;
            }

        }
        public IDbCommand DbCommand
        {
            get;
            set;
        }
        private IList<Parameter> mParameters = new List<Parameter>();
        protected IList<Parameter> Parameters {
            get {
                return mParameters;
            }
        }

        public void AddParameter(string name, object value) {
            AddParameter(name, value, ParameterDirection.Input);
        }
        public void AddParameter(Parameter parameter) {
            Parameters.Add(parameter);
        }
        public void AddParameter(string name, object value, ParameterDirection pd) {
            Parameter p = new Parameter();
            p.Name = name;
            p.Value = value;
            p.Direction = pd;
            Parameters.Add(p);
        }
        public void ClearParameter() {
            Parameters.Clear();
        }
        public class Parameter {
            private string mName;
            public string Name {
                get {
                    return mName;
                }
                set {
                    mName = value;
                }
            }
            private object mValue;
            public object Value {
                get {
                    return mValue;
                }
                set {
                    mValue = value;
                }
            }
            private ParameterDirection mDirection = ParameterDirection.Input;
            public ParameterDirection Direction {
                get {
                    return mDirection;
                }
                set {
                    mDirection = value;
                }
            }
        }
        public IDbCommand CreateCommand(IDriver driver) {
            IDbCommand cmd = driver.Command;
            cmd.CommandText = driver.ReplaceSql(Text.ToString());
            cmd.CommandType = CommandType;
            DbCommand = cmd;
            foreach (Parameter p in Parameters) {
                cmd.Parameters.Add(driver.CreateParameter(p.Name, p.Value, p.Direction));
            }
            return cmd;
        }
    }
    /// <summary>
 
    /// 数据连接句柄对象
    /// </summary>
    class ConnectionHandler : IDbTransaction, IDisposable {
        public ConnectionHandler(IDbConnection connection) {
            mConnection = connection;
        }
        private IDbConnection mConnection;
        public IDbConnection Connection {
            get {
                return mConnection;
            }


        }
        internal IDriver Driver {
            get;
            set;
        }
        private IDbTransaction mTransaction;
        public IDbTransaction Transaction {
            get {
                return mTransaction;
                
            }
        }
        public void BeginTransaction() {
            if(Transaction == null)
                mTransaction = Connection.BeginTransaction();
        }
        #region IDisposable 成员

        public void Dispose() {
            Rollback();
            if (mConnection != null)
                mConnection.Dispose();
        }

        #endregion
        #region IDbTransaction 成员

        public void Commit() {
            if (Transaction != null) {
                
                Transaction.Commit();
                mTransaction = null;
            }
        }

        public IsolationLevel IsolationLevel {
            get { return IsolationLevel.Unspecified; }
        }

        public void Rollback() {
            if (Transaction != null) {
                
                Transaction.Rollback();
                mTransaction = null;
            }
        }

        #endregion
        private void OnInitCommand(IDbCommand cmd) {
            cmd.Connection = Connection;
            if(Transaction != null)
                cmd.Transaction = Transaction;
        }
        public int ExecuteNonQuery(Command cmd) {
            IDbCommand _execmd = cmd.CreateCommand(Driver);
            OnInitCommand(_execmd);
            return _execmd.ExecuteNonQuery();
        }
        public IDataReader ExecuteReader(Command cmd) {
            IDbCommand _execmd = cmd.CreateCommand(Driver);
            OnInitCommand(_execmd);
            return _execmd.ExecuteReader();
        }

        public object ExecuteScalar(Command cmd) {

            IDbCommand _execmd = cmd.CreateCommand(Driver);
            OnInitCommand(_execmd);
            return _execmd.ExecuteScalar();
        }

        public DataSet ExecuteDataSet(Command cmd) {
            IDbCommand _execmd = cmd.CreateCommand(Driver);
            OnInitCommand(_execmd);
            IDataAdapter da = Driver.DataAdapter(_execmd);
            DataSet ds = new DataSet();
            da.Fill(ds);

            return ds;
        }
    }
    /// <summary>
 
    /// 数据连接上下文对象基于线程存储
    /// </summary>
    public interface IConnectinContext:IDbTransaction,IDisposable {
        void BeginTransaction();
        int ExecuteNonQuery(Command cmd);
        IDataReader ExecuteReader(Command cmd);
        object ExecuteScalar(Command cmd);
        DataSet ExecuteDataSet(Command cmd);
        IList<T> List<T>(Command cmd, Region region) where T : IEntityState,new();
        T ListFirst<T>(Command cmd) where T : IEntityState, new();
        T Load<T>(Command cmd) where T : IEntityState, new();
       
    }
  
    class ConnectionContext: IConnectinContext
        
    
    {
        public ConnectionContext(string db,IDriver driver) {
            mDB = db;
            if (DBContext.CurrentHandler(db) == null) {
                DBContext.AddConnectionHandler(mDB,driver);
                mActiveConnection = true;
            }
            mHandler = DBContext.CurrentHandler(mDB);
        }

        public int ExecuteNonQuery(Command cmd) {
            return mHandler.ExecuteNonQuery(cmd);
        }
        public IDataReader ExecuteReader(Command cmd) {
            return mHandler.ExecuteReader(cmd);
        }

        public object ExecuteScalar(Command cmd) {
            return mHandler.ExecuteScalar(cmd);
           
        }

        public DataSet ExecuteDataSet(Command cmd) {
            return mHandler.ExecuteDataSet(cmd);
        }
       
        private string mDB;
        private bool mActiveConnection = false;
        private bool mActiveTransaction = false;
        ConnectionHandler mHandler;
       
        #region IDisposable 成员

        public void Dispose() {
            if (mActiveTransaction)
                mHandler.Rollback();
            if (mActiveConnection) {
                mHandler.Dispose();
                DBContext.RemoveConnetionHandler(mDB);
            }
        }

        #endregion

        #region IDbTransaction 成员
        public void BeginTransaction() {
            if (mHandler.Transaction == null) {
                mHandler.BeginTransaction();
                mActiveTransaction = true;

            }
        }
        public void Commit() {
            if (mActiveTransaction) {
                mHandler.Commit();
            }
        }

        public IDbConnection Connection {
            get {
                return mHandler.Connection;
            }
        }

        public IsolationLevel IsolationLevel {
            get { return mHandler.IsolationLevel; }
        }

       

        #endregion

        #region IDbTransaction 成员


        public void Rollback() {
            if (mActiveTransaction) {
                mHandler.Rollback();
            };
        }

        #endregion

        #region IConnectinContext 成员


        public IList<T> List<T>(Command cmd, Region region) where T : IEntityState, new() {
            if (region == null)
                region = new Region { Start = 0, Size = 99999999 };
            IList<T> items = new List<T>();
            T item;
            using (IDataReader reader = ExecuteReader(cmd)) {
                int index = 0;
                while (reader.Read()) {
                    if (index >= region.Start) {
                        item = new T();
                        item.LoadData(reader);
                        items.Add(item);
                        if (items.Count == region.Size)
                        {
                            cmd.DbCommand.Cancel();
                            break;
                        }
                    }
                    index++;
                }
            }
            return items;
        }

        public T Load<T>(Command cmd) where T : IEntityState, new() {
            using (IDataReader reader = ExecuteReader(cmd)) {
                if (reader.Read()) {
                    T t = new T();
                    t.LoadData(reader);
                    return t;
                }
                return default(T);
            }
        }

        #endregion

        #region IConnectinContext 成员


        public T ListFirst<T>(Command cmd) where T : IEntityState, new()
        {
           
            T item=default(T);
            using (IDataReader reader = ExecuteReader(cmd))
            {
                
                if (reader.Read())
                {
                    
                        item = new T();
                        item.LoadData(reader);
                        cmd.DbCommand.Cancel();
                        return item;
                }
            }
            return item;
        }

        #endregion
    }
    /// <summary>
  
    /// 命令执行描述
    /// </summary>
    public interface ICommandExecute {
        void Execute(IConnectinContext cc);
    }
    /// <summary>
   
    /// 添加数据命令
    /// </summary>
    public class Insert:ICommandExecute {

        private Command mCommand;
        public Insert(string table) {
          
            mCommand = new Command("Insert into " + table);
        }
        private IList<Field> mInserFields = new List<Field>();
        public void AddField(string name, object value) {
            AddField(name, value, true);
        }
        public void AddField(string name, object value, bool isparameter) {
            Field f = new Field();
            f.IsParameter = isparameter;
            f.Name = name;
            f.Value = value;
            mInserFields.Add(f);
        }
        public void Execute(IConnectinContext cc) {
            System.Text.StringBuilder names, values;
            names = new System.Text.StringBuilder();
            values = new System.Text.StringBuilder();
            Field field;
            for (int i = 0; i < mInserFields.Count; i++) {
                if (i > 0) {
                    names.Append(",");
                    values.Append(",");
                }
                field = (Field)mInserFields[i];

                names.Append(field.Name);
                if (field.IsParameter) {
                    values.Append("@" + field.Name);
                    if (field.Value != null)
                        mCommand.AddParameter(field.Name, field.Value);
                    else
                        mCommand.AddParameter(field.Name, DBNull.Value);
                } else
                    values.Append(field.Value);

            }
            mCommand.Text.Append("(" + names + ")" + " Values(" + values + ")");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -