2018-04-04 c# DbOperator类

1.直接黏贴代码

public class DbOperator : IDisposable {
        const int COMMAND_TIMEOUT = 30;
        private int m_transCount = 0;
        private bool disposed = false;

        internal DbOperator(string provider, string connectionString) {
            if (string.IsNullOrEmpty(provider)) {
                throw new ArgumentNullException("provider");
            }
            if (string.IsNullOrEmpty(connectionString)) {
                throw new ArgumentNullException("connectionString");
            }

            DaoHelper helper = new DaoHelper(provider);
            conn = helper.CreateConnection(connectionString);
            cmd = conn.CreateCommand();
            cmd.CommandTimeout = COMMAND_TIMEOUT;
        }

        public DbOperator(DbCommand command) {
            if (command == null) {
                throw new ArgumentNullException("command");
            }
            cmd = command;
            cmd.CommandTimeout = COMMAND_TIMEOUT;
            conn = cmd.Connection;
        }
       
        private DbConnection conn = null;
        private DbCommand cmd = null;

        private DbParameter CreateParameter(string name) {
            DbParameter param = cmd.CreateParameter();
            param.ParameterName = name;
            return param;
        }
        public DbParameter CreateParameter(string name, object value) {
            DbParameter param = CreateParameter(name); 
            if (value!=null&&value.GetType() == typeof(DateTime) && (DateTime)value == DateTime.MinValue)
            {
                value = DBNull.Value; 
            }
            param.Value = value;
            return param;
        }
        private DbParameter CreateParameter(string name, object value, DbType type) {
            DbParameter param = CreateParameter(name, value);
            param.DbType = type;
            return param;
        }
        public void Prepare() {
            if (cmd == null) { throw new CommandNullException(); }
            cmd.CommandText = "";
            cmd.CommandTimeout = COMMAND_TIMEOUT;
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Clear();
        }

        public void ClearParameters() {
            cmd.Parameters.Clear();
        }
        public void Cancel() {
            cmd.Cancel();
        }
        /// <summary>
        /// 开启数据库事务
        /// </summary>
        public void BeginTransaction() {
            if (cmd == null) {
                throw new CommandNullException();
            }
            if (cmd.Connection == null) {
                throw new ConnectionNullException();
            }
            if (cmd.Transaction == null) {
                cmd.Transaction = cmd.Connection.BeginTransaction();
            }
            m_transCount++;
        }
        /// <summary>
        /// 提交数据库事务
        /// </summary>
        public void CommitTransaction() {
            if (cmd.Transaction != null) {
                m_transCount--;
                if (m_transCount > 0) {
                    return;
                }
                cmd.Transaction.Commit();
            }
        }
        /// <summary>
        /// 回滚数据库事务
        /// </summary>
        public void RollbackTransaction() {
            if (cmd.Transaction != null) {
                cmd.Transaction.Rollback();
                m_transCount = 0;
            }
        }

        #region AddParameter
        public void AddParameter(DbParameter param) {
            cmd.Parameters.Add(param);
        }

        public DbParameter AddParameter(string name) {
            DbParameter param = CreateParameter(name);
            cmd.Parameters.Add(param);
            return param;
        }
        public DbParameter AddParameter(string name, object value) {
            DbParameter param = CreateParameter(name, value);
            cmd.Parameters.Add(param);
            return param;
        }
        public DbParameter AddParameter(string name, object value, DbType type) {
            DbParameter param = CreateParameter(name, value, type);
            cmd.Parameters.Add(param);
            return param;
        }

        public DbParameter AddParameter(string name, object value, DbType type, ParameterDirection direction, int size)
        {
            DbParameter param = CreateParameter(name, value, type);
            param.Direction = direction;
            param.Size = size;
            cmd.Parameters.Add(param);
            return param;
        }
        #endregion

        #region ExecuteReader
        public DbDataReader ExecuteReader(string sql, CommandType type, CommandBehavior behavior, int timeout) {
            if (string.IsNullOrEmpty(sql)) { throw new ArgumentNullException("sql"); }
            cmd.CommandText = sql;
            cmd.CommandType = type;
            cmd.CommandTimeout = timeout;
            CheckParam();
            return cmd.ExecuteReader(behavior);
        }
        public DbDataReader ExecuteReader(string sql, CommandType type, CommandBehavior behavior) {
            return ExecuteReader(sql, type, behavior, COMMAND_TIMEOUT);
        }
        public DbDataReader ExecuteReader(string sql, CommandType type, int timeout) {
            return ExecuteReader(sql, type, CommandBehavior.Default, timeout);
        }
        public DbDataReader ExecuteReader(string sql, CommandType type) {
            return ExecuteReader(sql, type, CommandBehavior.Default, COMMAND_TIMEOUT);
        }
        public DbDataReader ExecuteReader(string sql, CommandBehavior behavior, int timeout) {
            return ExecuteReader(sql, CommandType.Text, behavior, timeout);
        }
        public DbDataReader ExecuteReader(string sql, CommandBehavior behavior) {
            return ExecuteReader(sql, CommandType.Text, behavior, COMMAND_TIMEOUT);
        }
        public DbDataReader ExecuteReader(string sql, int timeout) {
            return ExecuteReader(sql, CommandType.Text, CommandBehavior.Default, timeout);
        }
        public DbDataReader ExecuteReader(string sql) {
            return ExecuteReader(sql, CommandType.Text, CommandBehavior.Default, COMMAND_TIMEOUT);
        }
        #endregion

        #region ExecuteTable
        public DataTable ExecuteTable(string sql, CommandType type, CommandBehavior behavior, int timeout) {
            using (DbDataReader dr = ExecuteReader(sql, type, behavior, timeout)) {
                DataTable dt = new DataTable();
                dt.Load(dr);
                return dt;
            }
        }
        public DataTable ExecuteTable(string sql, CommandType type, CommandBehavior behavior) {
            return ExecuteTable(sql, type, behavior, COMMAND_TIMEOUT);
        }
        public DataTable ExecuteTable(string sql, CommandType type, int timeout) {
            return ExecuteTable(sql, type, CommandBehavior.Default, timeout);
        }
        public DataTable ExecuteTable(string sql, CommandType type) {
            return ExecuteTable(sql, type, CommandBehavior.Default, COMMAND_TIMEOUT);
        }
        public DataTable ExecuteTable(string sql, CommandBehavior behavior, int timeout) {
            return ExecuteTable(sql, CommandType.Text, behavior, timeout);
        }
        public DataTable ExecuteTable(string sql, CommandBehavior behavior) {
            return ExecuteTable(sql, CommandType.Text, behavior, COMMAND_TIMEOUT);
        }
        public DataTable ExecuteTable(string sql, int timeout) {
            return ExecuteTable(sql, CommandType.Text, CommandBehavior.Default, timeout);
        }
        public DataTable ExecuteTable(string sql) {
            return ExecuteTable(sql, CommandType.Text, CommandBehavior.Default, COMMAND_TIMEOUT);
        }

        public DataTable ExecuteTableWithoutType(string sql, CommandType type, CommandBehavior behavior, int timeout)
        {
            using (DbDataReader dr = ExecuteReader(sql, type, behavior, timeout))
            {
                return SqlWrapper.LoadDataTableWithoutType(dr);
            }
        }

        public DataTable ExecuteTableWithoutType(string sql)
        {
            return ExecuteTableWithoutType(sql, CommandType.Text, CommandBehavior.Default, COMMAND_TIMEOUT);
        }
        #endregion

        public DataSet ExecuteDataSet(string sql,params string[] tableName) {
            using (DbDataReader dr = ExecuteReader(sql, CommandType.Text, CommandBehavior.Default, COMMAND_TIMEOUT))
            {
                DataSet ds = new DataSet();
                ds.Load(dr, LoadOption.Upsert,tableName);
                return ds;
            }
        }

        #region ExecuteScalar
        public object ExecuteScalar(string sql, CommandType type, int timeout) {
            if (string.IsNullOrEmpty(sql)) { throw new ArgumentNullException("sql"); }
            cmd.CommandText = sql;
            cmd.CommandType = type;
            cmd.CommandTimeout = timeout;
            CheckParam();
            return cmd.ExecuteScalar();
        }
        public object ExecuteScalar(string sql, CommandType type) {
            return ExecuteScalar(sql, type, COMMAND_TIMEOUT);
        }
        public object ExecuteScalar(string sql, int timeout) {
            return ExecuteScalar(sql, CommandType.Text, timeout);
        }
        public object ExecuteScalar(string sql) {
            return ExecuteScalar(sql, CommandType.Text, COMMAND_TIMEOUT);
        }
        #endregion

        #region ExecuteNonQuery
        public int ExecuteNonQuery(string sql, CommandType type, int timeout) {
            if (string.IsNullOrEmpty(sql)) { throw new ArgumentNullException("sql"); }
            cmd.CommandText = sql;
            cmd.CommandType = type;
            cmd.CommandTimeout = timeout;
            CheckParam();
            return cmd.ExecuteNonQuery();
        }

        private void CheckParam()
        {
            foreach (DbParameter param in cmd.Parameters)
            {
                if (param.Value == null)
                    param.Value = DBNull.Value;
            }
        }
        public int ExecuteNonQuery(string sql, CommandType type) {
            return ExecuteNonQuery(sql, type, COMMAND_TIMEOUT);
        }
        public int ExecuteNonQuery(string sql, int timeout) {
            return ExecuteNonQuery(sql, CommandType.Text, timeout);
        }
        public int ExecuteNonQuery(string sql) {
            return ExecuteNonQuery(sql, CommandType.Text, COMMAND_TIMEOUT);
        }
        #endregion

        #region IDisposable 成员
        public void Dispose() {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        #endregion

        protected void Dispose(bool disposing)
        {
            if (disposing) { }
            if (!disposed)
            {
                if (conn != null)
                {
                    conn.Dispose();
                }
                if (cmd != null)
                {
                    cmd.Dispose();
                }
                disposed = true;
            }
        }
    }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,228评论 25 707
  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,584评论 1 180
  • 夜 这么静 比睡着了还静 我骑上我的白鹿 白鹿乘着 乍暖还寒的春风 四处寻觅 翩翩起舞的春姑娘 可曾惊扰了 你的梦境
    氿公子阅读 380评论 8 16
  • 就是就算考试发挥失常, 也比考试超常发挥的你还要优秀。
    茶凉雨簪阅读 189评论 0 1
  • 每天临睡前都要看一两个小时的书,不知道从什么时候起,看书时必做笔记,不做笔记就像没看过一样。 看各种书间歇的时候,...
    昭昭之辉阅读 372评论 4 9