Exemplo n.º 1
0
        ///// <summary>
        ///// 替换带#号参数
        ///// </summary>
        //private void ReplaceSQL()
        //{
        //    if (this.ReplaceParameters != null)
        //    {
        //        foreach (KeyValuePair<string, object> pair in this.ReplaceParameters)
        //        {
        //            this.CmdText = this.CmdText.Replace(pair.Key, pair.Value.ToString());
        //        }
        //    }
        //}

        //private void SetRwType()
        //{
        //    switch (FunctionName)
        //    {
        //        case "ExecuteNonQuery":
        //        case "ExecuteScalarWrite":
        //            this._DBrwType = DBrwType.Write;
        //            break;
        //        case "ExecuteDataSet":
        //        case "ExecuteScalarRead":
        //        case "Exists":
        //        case "GetData":
        //        case "GetDataList":
        //        case "GetDicListByGroup":
        //            this._DBrwType = DBrwType.Read;
        //            break;
        //        default:
        //            throw new Exception("读写类型未设置");
        //            break;
        //    }
        //}

        /// <summary>
        /// dbhelper 包装器
        /// </summary>
        /// <param name="dbName">数据库名称</param>
        /// <param name="tableName">表名称</param>
        /// <param name="sqlName">sql名称(不存在时传空)</param>
        /// <param name="parameters">参数(默认null)</param>
        /// <param name="cmdType">执行类型(默认text)</param>
        public DbHelperWrapper(DBrwType dbrwType, string dbName, string tableName, string sqlName, HashObject parameters = null, SqlType sqlType = SqlType.SqlName, CommandType cmdType = CommandType.Text)
        {
            this.DbName    = dbName;
            this.TableName = tableName;
            this.SqlType   = sqlType;
            this.SQLName   = sqlName;
            this.CmdType   = cmdType;
            this.LogEnable = true;//默认开启日志记录

            this.ReplaceParameters = new HashObject();

            //拷贝参数
            this.Parameters = new HashObject();
            if (parameters != null)
            {
                foreach (KeyValuePair <string, object> pair in parameters)
                {
                    if (pair.Key.IndexOf('#') == 0)//替换参数
                    {
                        this.ReplaceParameters.Add(pair.Key, pair.Value);
                    }
                    else
                    {
                        this.Parameters.Add(pair.Key, pair.Value);
                    }
                }
            }
            //获取SQL,补充默认参数
            if (this.SqlType == SqlType.SqlName)
            {
                SqlObj sqlobj = SchemaManager.GetDefaultSQL(this.DbName, this.TableName, SQLName);
                this.CmdText = sqlobj.SqlText;
                if (sqlobj.DBrwType != DBrwType.None)//检查SQL上是否包含设置
                {
                    this._DBrwType = sqlobj.DBrwType;
                }
                else
                {
                    this._DBrwType = dbrwType;//否则取dalbase 传递过来的读写类型
                }

                foreach (KeyValuePair <string, object> pair in sqlobj.DefaultParameters)
                {
                    if (!this.ReplaceParameters.ContainsKey(pair.Key))
                    {
                        this.ReplaceParameters.Add(pair.Key, pair.Value);
                    }
                }
            }
            else
            {
                this.CmdText   = SQLName;
                this._DBrwType = dbrwType;//取dalbase 传递过来的读写类型
            }

            //#替换SQL
            foreach (KeyValuePair <string, object> pair in this.ReplaceParameters)
            {
                this.CmdText = this.CmdText.Replace(pair.Key, pair.Value.ToString());
            }

            //计算分区
            this.ShardID = ShardManager.GetShardID(this.DbName, this.Parameters);
        }