ParameterSyntax(string name, MetaId metaId, DbParam param, string front, string back, bool displayValue)
 {
     Name = name;
     MetaId = metaId;
     _param = param;
     _front = front;
     _back = back;
     _displayValue = displayValue;
 }
Beispiel #2
0
        public List <DbParam> ToParameterList()
        {
            List <DbParam> ret = new List <DbParam>(this.Count);

            foreach (object dicVal in this._dbParams.Values)
            {
                DbParam dbParam = dicVal as DbParam;
                if (dbParam != null)
                {
                    ret.Add(dbParam);
                }
                else
                {
                    List <DbParam> dbParamList = dicVal as List <DbParam>;
                    for (int i = 0; i < dbParamList.Count; i++)
                    {
                        ret.Add(dbParamList[i]);
                    }
                }
            }

            return(ret);
        }
        public DataSet GetUserObject(AuthUser objAuthUser)
        {
            DbParam[] param = new DbParam[]
            {
                new DbParam(objAuthUser.MobileNo, typeof(System.String), "_mobile"),
                new DbParam(objAuthUser.Password, typeof(System.String), "_password"),
                new DbParam(objAuthUser.SchoolTenentId, typeof(System.String), "_schooltenentId"),
                new DbParam(objAuthUser.IsFaculty, typeof(System.Boolean), "_isFaculty")
            };
            DataSet ds = db.GetDataset("sp_MobileUserMaster_Detail", param);

            if (ds != null && ds.Tables.Count == 3)
            {
                ds.Tables[0].TableName = "LoginUser";
                ds.Tables[1].TableName = "Student";
                ds.Tables[2].TableName = "Notification";
            }
            else
            {
                ds = null;
            }
            return(ds);
        }
Beispiel #4
0
        public IEnumerable <OrderDetailForRedisRF> GetOrderDetailListByOrderNumber(string OrderNumber, string CustomerID)
        {
            IEnumerable <OrderDetailForRedisRF> list = new List <OrderDetailForRedisRF>();

            using (SqlConnection conn = new SqlConnection(BaseAccessor._dataBase.ConnectionString))
            {
                try
                {
                    DbParam[] param = new DbParam[] {
                        new DbParam("@OrderNumber", DbType.String, OrderNumber, ParameterDirection.Input),
                        new DbParam("@CustomerID", DbType.String, CustomerID, ParameterDirection.Input)
                    };
                    DataSet ds = ExecuteDataSet("Proc_WMS_RF_GetOrderDetailListByOrderNumber", param);
                    list = ds.Tables[0].ConvertToEntityCollection <OrderDetailForRedisRF>();
                    return(list);
                }
                catch (Exception ex)
                {
                    list = new List <OrderDetailForRedisRF>();
                    return(list);
                }
            }
        }
Beispiel #5
0
        public string GetExamDetail(int Year)
        {
            if (Year == 0)
            {
                Year = userDetail.AccedemicStartYear;
            }
            DbParam[] param = new DbParam[]
            {
                new DbParam(userDetail.schooltenentId, typeof(System.String), "_tenentId"),
                new DbParam(Year, typeof(System.Int32), "_year")
            };
            DataSet ds = db.GetDataset("sp_ExamDetails_SelFilter", param);

            if (ds != null && ds.Tables.Count > 0)
            {
                Result = JsonConvert.SerializeObject(ds);
            }
            else
            {
                Result = JsonConvert.SerializeObject(new DataTable());
            }
            return(Result);
        }
Beispiel #6
0
 public string ExamDataInsertion(Examdetails ObjExamdetails)
 {
     DbParam[] param = new DbParam[]
     {
         new DbParam(null, typeof(System.String), "_ExamDetailId"),
         new DbParam(userDetail.schooltenentId, typeof(System.String), "_SchooltenentId"),
         new DbParam(ObjExamdetails.ExamDescriptionId, typeof(System.String), "_ExamDescriptionId"),
         new DbParam(ObjExamdetails.Class, typeof(System.String), "_Class"),
         new DbParam(ObjExamdetails.SubjectId, typeof(System.String), "_SubjectId"),
         new DbParam(ObjExamdetails.ExamDate, typeof(System.DateTime), "_ExamDate"),
         new DbParam(ObjExamdetails.StartTime, typeof(System.String), "_Starttime"),
         new DbParam(ObjExamdetails.Duration, typeof(System.Int64), "_Duration"),
         new DbParam(userDetail.AccedemicStartYear, typeof(System.Int32), "_AcademicYearFrom"),
         new DbParam(userDetail.AccedemicStartYear + 1, typeof(System.Int32), "_AcademicYearTo"),
         new DbParam(userDetail.UserId, typeof(System.String), "_Adminid")
     };
     Result = db.ExecuteNonQuery("sp_examdetails_InsUpd", param, true);
     if (Result == null || Result == "")
     {
         Result = "";
     }
     return(Result);
 }
        public string StudenPaymentDetailService(string PayeeUid)
        {
            string Result = null;

            DbParam[] param = new DbParam[]
            {
                new DbParam(PayeeUid, typeof(System.String), "_PayeeUid"),
                new DbParam(userDetail.schooltenentId, typeof(System.String), "_TenentId"),
                new DbParam(userDetail.AccedemicStartYear, typeof(System.Int32), "_ForYear"),
                new DbParam(1, typeof(System.Int32), "_UserCode")
            };
            DataSet ds = db.GetDataset("sp_StudentPaymentDetail_Sel", param);

            if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
            {
                Result = JsonConvert.SerializeObject(ds);
            }
            else
            {
                Result = JsonConvert.SerializeObject("No record found");
            }
            return(Result);
        }
        public (DataSet, string) GetLoginUserObject(AuthUser authUser)
        {
            string Token          = null;
            string ProcessingData = null;

            DbParam[] param = new DbParam[]
            {
                new DbParam(authUser.UserId, typeof(System.String), "_mobile"),
                new DbParam(authUser.Password, typeof(System.String), "_password")
            };
            DataSet ds = db.GetDataset("sp_GetLoginUser_Detail", param, true, ref ProcessingData);

            if (ds != null && ds.Tables.Count > 0)
            {
                this.autoMapper = new TableAutoMapper();
                UserDetail userDetail = this.autoMapper.AutoMapToObject <UserDetail>(ds.Tables[0]);
                if (userDetail != null)
                {
                    authUser.Role = Policies.Admin;
                    Token         = GenerateToken(authUser);
                    beanContext.AddNewSession(string.Empty, "userdetail", userDetail, Token);
                }
            }

            if (ds.Tables.Count == 8)
            {
                ds.Tables[0].TableName = "CurrentUser";
                ds.Tables[1].TableName = "Classes";
                ds.Tables[2].TableName = "TotalCount";
                ds.Tables[3].TableName = "Menu";
                ds.Tables[4].TableName = "Subject";
                ds.Tables[5].TableName = "Roles";
                ds.Tables[6].TableName = "ColumnMapping";
                ds.Tables[7].TableName = "StateNCity";
            }
            return(ds, Token);
        }
Beispiel #9
0
        /// <summary>
        /// Implementation of IDbParameterAssembler.SetupParameter
        /// </summary>
        /// <param name="parameter"></param>
        /// <param name="param"></param>
        public override void SetupParameter(IDbDataParameter parameter, DbParam param)
        {
            base.SetupParameter(parameter, param);

            if (parameter is NpgsqlParameter)
            {
                //For PostgreSQL json
                NpgsqlParameter pgsqlParameter = (NpgsqlParameter)parameter;

                DbType jsonDbType = DbTypeConsts.NpgJson;
                if (param.DbType == jsonDbType)
                {
                    parameter.DbType            = DbType.String;
                    pgsqlParameter.NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Json;
                }
            }
            else if (parameter is OracleParameter)
            {
                //For Oracle Clob/NClob

                OracleParameter oracleParameter = (OracleParameter)parameter;

                /* 针对 oracle 长文本做处理 */
                string value = oracleParameter.Value as string;
                if (value != null && value.Length > 2000)
                {
                    if (param.DbType == DbType.String || param.DbType == DbType.StringFixedLength)
                    {
                        oracleParameter.OracleDbType = OracleDbType.NClob;
                    }
                    else if (param.DbType == DbType.AnsiString || param.DbType == DbType.AnsiStringFixedLength)
                    {
                        oracleParameter.OracleDbType = OracleDbType.Clob;
                    }
                }
            }
        }
        /// <summary>
        /// 放弃待办项
        /// </summary>
        /// <param name="todobh"></param>
        /// <returns></returns>
        public IActionResult Abandon(string todobh)
        {
            Result result;

            try
            {
                using (DatabaseHelper helper = DatabaseHelper.CreateByConnName("ZNoteDB"))
                {
                    // 获取所有子项
                    string userbh    = TokenHelper.GetUserBH();
                    var    todobhLst = _GetAllSubTodoBH(todobh);
                    todobhLst.Insert(0, todobh);
                    string inSQL;
                    IEnumerable <DbParam> inParams = DbParam.GetDbParams_WhereIn(out inSQL, "todobh", todobhLst.ToArray());
                    string         sql             = $"update d_todo set state='放弃',abandontime=sysdate() where userbh=@userbh and {inSQL}";
                    List <DbParam> DbParams        = new List <DbParam>()
                    {
                        new DbParam("userbh", userbh)
                    };
                    DbParams.AddRange(inParams);
                    if (helper.ExecuteNonQuery(sql, DbParams.ToArray()) > 0)
                    {
                        result = Result.Success;
                    }
                    else
                    {
                        result = ResultCode.DB_UpdateFail.GetResult();
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.log("Todo.Abandon", ex);
                result = Result.CreateDefeat(ex.Message);
            }
            return(Json(result));
        }
Beispiel #11
0
        public string SaveSettlementBySettlementNumber(SettlementSearchCondition wc)
        {
            string Mess = string.Empty;
            GetSettlementByConditionResponse response = new GetSettlementByConditionResponse();

            try
            {
                //string[] qtysum = wc.ActulQtyargs;
                //if (qtysum.Length > 0)
                //{
                string str = string.Empty;
                str = " and  SettlementNumber='" + wc.SettlementNumber.Trim() + "' ";

                DbParam[] dbParams = new DbParam[] {
                    new DbParam("@Where", DbType.String, str, ParameterDirection.Input)
                };
                DataTable dt = this.ExecuteDataSet("Proc_WMS_GetSettlementBySettlementNumber", dbParams).Tables[1];
                //if (dt.Rows.Count == qtysum.Length)
                //{
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    DbParam[] dbUpdate = new DbParam[] {
                        //new DbParam("@ActualQty", DbType.String,qtysum[i].ToString(),ParameterDirection.Input),
                        new DbParam("@ID", DbType.Int32, int.Parse(dt.Rows[i]["ID"].ToString()), ParameterDirection.Input)
                    };

                    this.ExecuteScalar("Proc_WMS_SaveSettlementBySettlementNumber", dbUpdate);
                }
                //}
                //}
                return("更新成功");
            }
            catch (Exception)
            {
                return("更新失败");
            }
        }
Beispiel #12
0
        public IEnumerable <OrderDetailInfo> GetOrderDetailList2(string ReceiptNumber, string customerid, string warehousename)
        {
            IEnumerable <OrderDetailInfo> list = new List <OrderDetailInfo>();

            using (SqlConnection conn = new SqlConnection(BaseAccessor._dataBase.ConnectionString))
            {
                try
                {
                    DbParam[] param = new DbParam[] {
                        new DbParam("@OrderNumber", DbType.String, ReceiptNumber, ParameterDirection.Input),
                        new DbParam("@CustomerID", DbType.String, customerid, ParameterDirection.Input),
                        new DbParam("@WarehouseName", DbType.String, warehousename, ParameterDirection.Input)
                    };
                    DataSet ds = ExecuteDataSet("Proc_WMS_RF_GetOrderDetailList2", param);
                    list = ds.Tables[0].ConvertToEntityCollection <OrderDetailInfo>();
                    return(list);
                }
                catch (Exception ex)
                {
                    list = new List <OrderDetailInfo>();
                    return(list);
                }
            }
        }
Beispiel #13
0
        //导出
        public DataSet ExportSettlementBySettlementNumber_b(SettlementSearchCondition wc)
        {
            string Mess = string.Empty;

            GetSettlementByConditionResponse response = new GetSettlementByConditionResponse();

            try
            {
                //保存结算主子表
                DataTable dt = new DataTable();
                #region 查询条件
                string sb = string.Empty;
                if (!string.IsNullOrEmpty(wc.CustomerID.ToString()))
                {
                    sb += " and  c.CustomerID='" + wc.CustomerID.ToString().Trim() + "' ";
                }
                if (!string.IsNullOrEmpty(wc.WarehouseID.ToString()))
                {
                    sb += " and  c.WarehouseID='" + wc.WarehouseID.ToString().Trim() + "' ";
                }
                if (!string.IsNullOrEmpty(wc.SettlementNumber))
                {
                    sb += " and  c.SettlementNumber='" + wc.SettlementNumber.Trim() + "' ";
                }
                #endregion
                DbParam[] dbParams = new DbParam[] {
                    new DbParam("@Where", DbType.String, sb, ParameterDirection.Input)
                };
                DataSet ds = this.ExecuteDataSet("Proc_WMS_GetSettlementBySettlementNumber_Export", dbParams);
                return(ds);
            }
            catch (Exception Ex)
            {
                return(null);
            }
        }
        public string SaveSchoolCalendarChangesService(SchoolCalendar ObjSchoolCalendar)
        {
            ServiceResult ObjServiceResult = validateModalService.ValidateModalFieldsService(typeof(SchoolCalendar), ObjSchoolCalendar);

            if (ObjServiceResult.IsValidModal)
            {
                DbParam[] param = new DbParam[]
                {
                    new DbParam(ObjSchoolCalendar.SchoolCalendarId, typeof(System.String), "_SchoolEventUid"),
                    new DbParam(userDetail.schooltenentId, typeof(System.String), "_tenentUid"),
                    new DbParam(ObjSchoolCalendar.Title, typeof(System.String), "_Title"),
                    new DbParam(ObjSchoolCalendar.Description, typeof(System.String), "_Description"),
                    new DbParam(ObjSchoolCalendar.StartDate, typeof(System.DateTime), "_StartDate"),
                    new DbParam(ObjSchoolCalendar.EndDate, typeof(System.DateTime), "_EndDate"),
                    new DbParam(ObjSchoolCalendar.StartTime, typeof(System.String), "_StartTime"),
                    new DbParam(ObjSchoolCalendar.EndTime, typeof(System.String), "_EndTime"),
                    new DbParam(ObjSchoolCalendar.IsFullDayEvent, typeof(System.Boolean), "_IsFullDayEvent"),
                    new DbParam(ObjSchoolCalendar.BindUrl, typeof(System.String), "_BindUrl"),
                    new DbParam(userDetail.UserId, typeof(System.String), "_adminid")
                };
                OutParam = db.ExecuteNonQuery("sp_schoolevents_InsUpd", param, true);
            }
            return(OutParam);
        }
        public IEnumerable <StoresByGetReceipt> GetReceipt(GetReceiptbyCondition Request, int pageIndex, int pageSize, out int rowCount)
        {
            string WhereSql = "";

            // string WhereSqlRRTime = "";
            if (Request != null)
            {
                WhereSql = SKUSearchCondition(Request);
                //WhereSqlRRTime = SKUSearchConditionRRTime(Request);
            }
            int tempRowCount = 0;

            DbParam[] dbParams = new DbParam[] {
                new DbParam("@WhereSql", DbType.String, WhereSql, ParameterDirection.Input),
                //  new DbParam("@WhereSqlRRTime", DbType.String, WhereSql, ParameterDirection.Input),
                new DbParam("@PageIndex", DbType.Int32, pageIndex, ParameterDirection.Input),
                new DbParam("@PageSize", DbType.Int32, pageSize, ParameterDirection.Input),
                new DbParam("@RowCount", DbType.Int32, tempRowCount, ParameterDirection.Output)
            };
            DataTable dt = this.ExecuteDataTable("[Proc_WMS_GetReceipt]", dbParams);

            rowCount = (int)dbParams[3].Value;
            return(dt.ConvertToEntityCollection <StoresByGetReceipt>());
        }
Beispiel #16
0
        public GetInventoryBySearchConditionResponse GetInventoryBySearchConditionGroup(InventorySearchCondition SearchCondition, int PageIndex, int PageSize, out int RowCount)
        {
            GetInventoryBySearchConditionResponse response = new GetInventoryBySearchConditionResponse();
            string sqlWhere        = this.GenGetInventory(SearchCondition);
            string sqlOrderByType  = this.OrderByType(SearchCondition);
            string sqlOrderByType2 = this.OrderByType2(SearchCondition);
            int    tempRowCount    = 0;

            DbParam[] dbParams = new DbParam[] {
                new DbParam("@Where", DbType.String, sqlWhere, ParameterDirection.Input),
                new DbParam("@OrderByType", DbType.String, sqlOrderByType, ParameterDirection.Input),
                new DbParam("@OrderByType2", DbType.String, sqlOrderByType2, ParameterDirection.Input),
                new DbParam("@PageIndex", DbType.Int32, PageIndex, ParameterDirection.Input),
                new DbParam("@PageSize", DbType.Int32, PageSize, ParameterDirection.Input),
                new DbParam("@RowCount", DbType.Int32, tempRowCount, ParameterDirection.Output)
            };
            DataSet ds = this.ExecuteDataSet("Proc_WMS_GetInventoryBySearchConditionGroup", dbParams);

            RowCount = (int)dbParams[5].Value;
            //return ds.Tables[0].ConvertToEntityCollection<Inventorys>();
            response.InventoryCollection  = ds.Tables[0].ConvertToEntityCollection <Inventorys>();
            response.InventoryCollection2 = ds.Tables[1].ConvertToEntityCollection <Inventorys>();
            return(response);
        }
        public string GetAllAnnouncementService(FetchAnnouncement fetchAnnouncement)
        {
            string ResultSet = null;

            DbParam[] param = new DbParam[]
            {
                new DbParam(fetchAnnouncement.searchModal.SearchString, typeof(System.String), "_searchString"),
                new DbParam(fetchAnnouncement.searchModal.SortBy, typeof(System.String), "_sortBy"),
                new DbParam(fetchAnnouncement.searchModal.PageIndex, typeof(System.Int32), "_pageIndex"),
                new DbParam(fetchAnnouncement.searchModal.PageSize, typeof(System.Int32), "_pageSize"),
                new DbParam(fetchAnnouncement.StudentUid, typeof(System.String), "_studentUid"),
                new DbParam(fetchAnnouncement.ClassDetailUid, typeof(System.String), "_classDetailUid"),
                new DbParam(this.userDetail.schooltenentId, typeof(System.String), "_tenentId")
            };

            DataSet ds = db.GetDataset("sp_Announcement_SelFilter", param);

            if (ds != null && ds.Tables.Count > 0)
            {
                ds        = UiMappedColumn.BuildColumn <Announcement>(ds);
                ResultSet = JsonConvert.SerializeObject(ds);
            }
            return(ResultSet);
        }
Beispiel #18
0
        public Clients GetClientDetailByUid(string ExistingClientUid)
        {
            Clients ClientResult = null;
            String  ResultSet    = null;

            ClientResult = new Clients();
            DbParam[] param = new DbParam[]
            {
                new DbParam(ExistingClientUid, typeof(System.String), "_clientUid"),
                new DbParam(userDetail.schooltenentId, typeof(System.String), "_tenentUid")
            };

            DataSet ds = db.GetDataset("sp_Client_ByUid", param);

            if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
            {
                ClientResult = userDefineMapping.ConvertToObject(ds.Tables[0], ClientResult.GetType(), out ResultSet) as Clients;
                if (ResultSet != "100")
                {
                    return(null);
                }
            }
            return(ClientResult);
        }
Beispiel #19
0
        public int GetTotal(string startDate, string endDate)
        {
            string query = @"SELECT count(*) as Total
                                FROM " + nameData + @".sms_packages_distribute
                                WHERE
	                                STR_TO_DATE(CONCAT(MonthStart, '/', YearStart), '%m/%Y') >= STR_TO_DATE(@StartDate, '%m/%Y') AND
                                    STR_TO_DATE(CONCAT(MonthEnd, '/', YearEnd), '%m/%Y') <= STR_TO_DATE(@EndDate, '%m/%Y')";

            List <DbParam> param = new List <DbParam>();

            param.Add(DbParam.Create("@StartDate", startDate));
            param.Add(DbParam.Create("@EndDate", endDate));

            var reader = _context.Session.ExecuteReader(query, param);
            int total  = 0;

            while (reader.Read())
            {
                total = Convert.ToInt32(reader["Total"]);
            }
            reader.Close();

            return(total);
        }
        public override string GetQueryWithFilter(string commandText, IList <DbField> filterFields, string filter, out DbParam [] pars)
        {
            SelectBuilder sBuilder = new SelectBuilder(fieldsTable, commandText);

            string []      filterKeys = filter.Split(new [] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            List <DbParam> p          = new List <DbParam> ();

            foreach (string key in filterKeys)
            {
                StringBuilder condition = new StringBuilder();

                DbParam par = GetFilterParam(p, key);
                p.Add(par);

                foreach (DbField field in filterFields)
                {
                    SelectColumnInfo colInfo = sBuilder.SelectClause [field];
                    if (colInfo == null)
                    {
                        throw new ArgumentException(string.Format("Cannot search for field {0} as it is not populated from the database", field));
                    }

                    if (condition.Length > 0)
                    {
                        condition.Append(" OR ");
                    }

                    condition.AppendFormat(GetFilterCondition(colInfo.SourceExpression, par));
                }

                sBuilder.WhereClause.Add(new KeyValuePair <string, ConditionCombineLogic> (string.Format("({0})", condition), ConditionCombineLogic.And));
            }

            pars = p.ToArray();
            return(sBuilder.ToString());
        }
Beispiel #21
0
        public override object Insert <TEntity>(Expression <Func <TEntity> > content, string table)
        {
            PublicHelper.CheckNull(content);

            TypeDescriptor typeDescriptor = EntityTypeContainer.GetDescriptor(typeof(TEntity));

            if (typeDescriptor.PrimaryKeys.Count > 1)
            {
                /* 对于多主键的实体,暂时不支持调用这个方法进行插入 */
                throw new NotSupportedException(string.Format("Can not call this method because entity '{0}' has multiple keys.", typeDescriptor.Definition.Type.FullName));
            }

            PropertyDescriptor keyPropertyDescriptor = typeDescriptor.PrimaryKeys.FirstOrDefault();

            Dictionary <MemberInfo, Expression> insertColumns = InitMemberExtractor.Extract(content);

            DbTable explicitDbTable = null;

            if (table != null)
            {
                explicitDbTable = new DbTable(table, typeDescriptor.Table.Schema);
            }
            DefaultExpressionParser expressionParser = typeDescriptor.GetExpressionParser(explicitDbTable);
            DbInsertExpression      insertExp        = new DbInsertExpression(explicitDbTable ?? typeDescriptor.Table);

            object keyVal = null;

            foreach (var kv in insertColumns)
            {
                MemberInfo         key = kv.Key;
                PropertyDescriptor propertyDescriptor = typeDescriptor.TryGetPropertyDescriptor(key);

                if (propertyDescriptor == null)
                {
                    throw new ChloeException(string.Format("The member '{0}' does not map any column.", key.Name));
                }

                if (propertyDescriptor.IsAutoIncrement)
                {
                    throw new ChloeException(string.Format("Could not insert value into the auto increment column '{0}'.", propertyDescriptor.Column.Name));
                }

                if (propertyDescriptor.HasSequence())
                {
                    throw new ChloeException(string.Format("Can not insert value into the column '{0}', because it's mapping member has define a sequence.", propertyDescriptor.Column.Name));
                }

                if (propertyDescriptor.IsPrimaryKey)
                {
                    object val = ExpressionEvaluator.Evaluate(kv.Value);
                    if (val == null)
                    {
                        throw new ChloeException(string.Format("The primary key '{0}' could not be null.", propertyDescriptor.Property.Name));
                    }
                    else
                    {
                        keyVal = val;
                        insertExp.InsertColumns.Add(propertyDescriptor.Column, DbExpression.Parameter(keyVal, propertyDescriptor.PropertyType, propertyDescriptor.Column.DbType));
                        continue;
                    }
                }

                insertExp.InsertColumns.Add(propertyDescriptor.Column, expressionParser.Parse(kv.Value));
            }

            foreach (PropertyDescriptor propertyDescriptor in typeDescriptor.PropertyDescriptors)
            {
                if (propertyDescriptor.IsAutoIncrement && propertyDescriptor.IsPrimaryKey)
                {
                    insertExp.Returns.Add(propertyDescriptor.Column);
                    continue;
                }

                if (propertyDescriptor.HasSequence())
                {
                    DbMethodCallExpression getNextValueForSequenceExp = PublicHelper.MakeNextValueForSequenceDbExpression(propertyDescriptor);
                    insertExp.InsertColumns.Add(propertyDescriptor.Column, getNextValueForSequenceExp);

                    if (propertyDescriptor.IsPrimaryKey)
                    {
                        insertExp.Returns.Add(propertyDescriptor.Column);
                    }

                    continue;
                }
            }

            if (keyPropertyDescriptor != null)
            {
                //主键为空并且主键又不是自增列
                if (keyVal == null && !keyPropertyDescriptor.IsAutoIncrement && !keyPropertyDescriptor.HasSequence())
                {
                    throw new ChloeException(string.Format("The primary key '{0}' could not be null.", keyPropertyDescriptor.Property.Name));
                }
            }

            List <DbParam> parameters;

            this.ExecuteNonQuery(insertExp, out parameters);

            if (keyPropertyDescriptor != null && (keyPropertyDescriptor.IsAutoIncrement || keyPropertyDescriptor.HasSequence()))
            {
                string  outputColumnName = Utils.GenOutputColumnParameterName(keyPropertyDescriptor.Column.Name);
                DbParam outputParam      = parameters.Where(a => a.Direction == ParamDirection.Output && a.Name == outputColumnName).First();
                keyVal = PublicHelper.ConvertObjType(outputParam.Value, keyPropertyDescriptor.PropertyType);
            }

            return(keyVal); /* It will return null if an entity does not define primary key. */
        }
Beispiel #22
0
        public static void ExecuteCommandText()
        {
            List <User> users = context.SqlQuery <User>("select * from Users where Age > @age", DbParam.Create("@age", 12)).ToList();

            int rowsAffected = context.Session.ExecuteNonQuery("update Users set name=@name where Id = 1", DbParam.Create("@name", "Chloe"));

            /*
             * 执行存储过程:
             * User user = context.SqlQuery<User>("Proc_GetUser", CommandType.StoredProcedure, DbParam.Create("@id", 1)).FirstOrDefault();
             * rowsAffected = context.Session.ExecuteNonQuery("Proc_UpdateUserName", CommandType.StoredProcedure, DbParam.Create("@name", "Chloe"));
             */

            ConsoleHelper.WriteLineAndReadKey();
        }
Beispiel #23
0
        public override void InsertRange <TEntity>(List <TEntity> entities, bool keepIdentity = false)
        {
            /*
             * 将 entities 分批插入数据库
             * 每批生成 insert into TableName(...) values(...),(...)...
             * 该方法相对循环一条一条插入,速度提升 2/3 这样
             */

            Utils.CheckNull(entities);
            if (entities.Count == 0)
            {
                return;
            }

            int maxParameters = 2100;
            int batchSize     = 50; /* 每批实体大小,此值通过测试得出相对插入速度比较快的一个值 */

            TypeDescriptor typeDescriptor = TypeDescriptor.GetDescriptor(typeof(TEntity));

            var e = typeDescriptor.MappingMemberDescriptors.Select(a => a.Value);

            if (keepIdentity == false)
            {
                e = e.Where(a => a.IsAutoIncrement == false);
            }
            List <MappingMemberDescriptor> mappingMemberDescriptors = e.ToList();
            int maxDbParamsCount = maxParameters - mappingMemberDescriptors.Count; /* 控制一个 sql 的参数个数 */

            string sqlTemplate = AppendInsertRangeSqlTemplate(typeDescriptor, mappingMemberDescriptors);

            Action insertAction = () =>
            {
                int            batchCount = 0;
                List <DbParam> dbParams   = new List <DbParam>();
                StringBuilder  sqlBuilder = new StringBuilder();
                for (int i = 0; i < entities.Count; i++)
                {
                    var entity = entities[i];

                    if (batchCount > 0)
                    {
                        sqlBuilder.Append(",");
                    }

                    sqlBuilder.Append("(");
                    for (int j = 0; j < mappingMemberDescriptors.Count; j++)
                    {
                        if (j > 0)
                        {
                            sqlBuilder.Append(",");
                        }

                        MappingMemberDescriptor mappingMemberDescriptor = mappingMemberDescriptors[j];
                        object val = mappingMemberDescriptor.GetValue(entity);
                        if (val == null)
                        {
                            sqlBuilder.Append("NULL");
                            continue;
                        }

                        Type valType = val.GetType();
                        if (valType.IsEnum)
                        {
                            val     = Convert.ChangeType(val, Enum.GetUnderlyingType(valType));
                            valType = val.GetType();
                        }

                        if (ToStringableNumericTypes.ContainsKey(valType))
                        {
                            sqlBuilder.Append(val.ToString());
                            continue;
                        }

                        if (val is bool)
                        {
                            if ((bool)val == true)
                            {
                                sqlBuilder.AppendFormat("1");
                            }
                            else
                            {
                                sqlBuilder.AppendFormat("0");
                            }
                            continue;
                        }
                        else if (val is double)
                        {
                            double v = (double)val;
                            if (v >= long.MinValue && v <= long.MaxValue)
                            {
                                sqlBuilder.Append(((long)v).ToString());
                                continue;
                            }
                        }
                        else if (val is float)
                        {
                            float v = (float)val;
                            if (v >= long.MinValue && v <= long.MaxValue)
                            {
                                sqlBuilder.Append(((long)v).ToString());
                                continue;
                            }
                        }
                        else if (val is decimal)
                        {
                            decimal v = (decimal)val;
                            if (v >= long.MinValue && v <= long.MaxValue)
                            {
                                sqlBuilder.Append(((long)v).ToString());
                                continue;
                            }
                        }

                        string  paramName = UtilConstants.ParameterNamePrefix + dbParams.Count.ToString();
                        DbParam dbParam   = new DbParam(paramName, val)
                        {
                            DbType = mappingMemberDescriptor.Column.DbType
                        };
                        dbParams.Add(dbParam);
                        sqlBuilder.Append(paramName);
                    }
                    sqlBuilder.Append(")");

                    batchCount++;

                    if ((batchCount >= 20 && dbParams.Count >= 120 /*参数个数太多也会影响速度*/) || dbParams.Count >= maxDbParamsCount || batchCount >= batchSize || (i + 1) == entities.Count)
                    {
                        sqlBuilder.Insert(0, sqlTemplate);
                        string sql = sqlBuilder.ToString();
                        this.Session.ExecuteNonQuery(sql, dbParams.ToArray());

                        sqlBuilder.Clear();
                        dbParams.Clear();
                        batchCount = 0;
                    }
                }
            };

            Action fAction = () =>
            {
                bool   shouldTurnOff_IDENTITY_INSERT = false;
                string tableName = null;
                if (keepIdentity == true)
                {
                    tableName = AppendTableName(typeDescriptor.Table);
                    this.Session.ExecuteNonQuery(string.Format("SET IDENTITY_INSERT {0} ON ", tableName));
                    shouldTurnOff_IDENTITY_INSERT = true;
                }

                insertAction();
                if (shouldTurnOff_IDENTITY_INSERT == true)
                {
                    this.Session.ExecuteNonQuery(string.Format("SET IDENTITY_INSERT {0} OFF ", tableName));
                }
            };

            if (this.Session.IsInTransaction)
            {
                fAction();
            }
            else
            {
                /* 因为分批插入,所以需要开启事务保证数据一致性 */
                this.Session.BeginTransaction();
                try
                {
                    fAction();
                    this.Session.CommitTransaction();
                }
                catch
                {
                    if (this.Session.IsInTransaction)
                    {
                        this.Session.RollbackTransaction();
                    }
                    throw;
                }
            }
        }
Beispiel #24
0
        public override DbExpression Visit(DbParameterExpression exp)
        {
            object paramValue = exp.Value;
            Type   paramType  = exp.Type;

            if (paramType.IsEnum())
            {
                paramType = Enum.GetUnderlyingType(paramType);
                if (paramValue != null)
                {
                    paramValue = Convert.ChangeType(paramValue, paramType);
                }
            }

            if (paramValue == null)
            {
                paramValue = DBNull.Value;
            }

            DbParam p;

            if (paramValue == DBNull.Value)
            {
                p = this._parameters.Where(a => Utils.AreEqual(a.Value, paramValue) && a.Type == paramType).FirstOrDefault();
            }
            else
            {
                p = this._parameters.Where(a => Utils.AreEqual(a.Value, paramValue)).FirstOrDefault();
            }

            if (p != null)
            {
                this._sqlBuilder.Append(p.Name);
                return(exp);
            }

            string paramName = GenParameterName(this._parameters.Count);

            p = DbParam.Create(paramName, paramValue, paramType);

            if (paramValue.GetType() == UtilConstants.TypeOfString)
            {
                if (exp.DbType == DbType.AnsiStringFixedLength || exp.DbType == DbType.StringFixedLength)
                {
                    p.Size = ((string)paramValue).Length;
                }
                else if (((string)paramValue).Length <= 4000)
                {
                    p.Size = 4000;
                }
            }

            if (exp.DbType != null)
            {
                p.DbType = exp.DbType;
            }

            this._parameters.Add(p);
            this._sqlBuilder.Append(paramName);
            return(exp);
        }
 protected virtual string GetFilterCondition(string source, DbParam parameter)
 {
     return(string.Format("({0} LIKE {1})",
                          source, GetConcatStatement("'%'", fieldsTable.GetParameterName(parameter.ParameterName), "'%'")));
 }
Beispiel #26
0
        public virtual IDbDataParameter CreateDataParameter(IDbCommand cmd, DbParam param)
        {
            IDbDataParameter parameter = cmd.CreateParameter();

            parameter.ParameterName = param.Name;

            Type parameterType = null;

            if (param.Value == null || param.Value == DBNull.Value)
            {
                parameter.Value = DBNull.Value;
                parameterType   = param.Type ?? typeof(object);
            }
            else
            {
                parameterType = param.Value.GetType();
                if (parameterType.IsEnum)
                {
                    parameterType   = Enum.GetUnderlyingType(parameterType);
                    parameter.Value = Convert.ChangeType(param.Value, parameterType);
                }
                else
                {
                    parameter.Value = param.Value;
                }
            }

            if (param.Precision != null)
            {
                parameter.Precision = param.Precision.Value;
            }

            if (param.Scale != null)
            {
                parameter.Scale = param.Scale.Value;
            }

            if (param.Size != null)
            {
                parameter.Size = param.Size.Value;
            }

            if (param.DbType != null)
            {
                parameter.DbType = param.DbType.Value;
            }
            else
            {
                parameter.DbType = this.DbType;
            }

            const int defaultSizeOfStringOutputParameter = 4000;/* 当一个 string 类型输出参数未显示指定 Size 时使用的默认大小。如果有需要更大或者该值不足以满足需求,需显示指定 DbParam.Size 值 */

            if (param.Direction == ParamDirection.Input)
            {
                parameter.Direction = ParameterDirection.Input;
            }
            else if (param.Direction == ParamDirection.Output)
            {
                parameter.Direction = ParameterDirection.Output;
                param.Value         = null;
                if (param.Size == null && param.Type == UtilConstants.TypeOfString)
                {
                    parameter.Size = defaultSizeOfStringOutputParameter;
                }
            }
            else if (param.Direction == ParamDirection.InputOutput)
            {
                parameter.Direction = ParameterDirection.InputOutput;
                if (param.Size == null && param.Type == UtilConstants.TypeOfString)
                {
                    parameter.Size = defaultSizeOfStringOutputParameter;
                }
            }
            else
            {
                throw new NotSupportedException(string.Format("ParamDirection '{0}' is not supported.", param.Direction));
            }

            return(parameter);
        }
Beispiel #27
0
        public override TEntity Insert <TEntity>(TEntity entity, string table)
        {
            PublicHelper.CheckNull(entity);

            TypeDescriptor typeDescriptor = EntityTypeContainer.GetDescriptor(typeof(TEntity));

            DbTable dbTable = PublicHelper.CreateDbTable(typeDescriptor, table);

            List <PrimitivePropertyDescriptor> outputColumns = new List <PrimitivePropertyDescriptor>();
            Dictionary <PrimitivePropertyDescriptor, DbExpression> insertColumns = new Dictionary <PrimitivePropertyDescriptor, DbExpression>();

            foreach (PrimitivePropertyDescriptor propertyDescriptor in typeDescriptor.PrimitivePropertyDescriptors)
            {
                if (propertyDescriptor.IsAutoIncrement)
                {
                    outputColumns.Add(propertyDescriptor);
                    continue;
                }

                if (propertyDescriptor.HasSequence())
                {
                    DbMethodCallExpression getNextValueForSequenceExp = PublicHelper.MakeNextValueForSequenceDbExpression(propertyDescriptor, dbTable.Schema);
                    insertColumns.Add(propertyDescriptor, getNextValueForSequenceExp);
                    outputColumns.Add(propertyDescriptor);
                    continue;
                }

                object val = propertyDescriptor.GetValue(entity);

                PublicHelper.NotNullCheck(propertyDescriptor, val);

                DbExpression valExp = DbExpression.Parameter(val, propertyDescriptor.PropertyType, propertyDescriptor.Column.DbType);
                insertColumns.Add(propertyDescriptor, valExp);
            }

            DbInsertExpression e = new DbInsertExpression(dbTable);

            foreach (var kv in insertColumns)
            {
                e.InsertColumns.Add(kv.Key.Column, kv.Value);
            }

            e.Returns.AddRange(outputColumns.Select(a => a.Column));

            List <DbParam> parameters;

            this.ExecuteNonQuery(e, out parameters);

            List <DbParam> outputParams = parameters.Where(a => a.Direction == ParamDirection.Output).ToList();

            for (int i = 0; i < outputColumns.Count; i++)
            {
                PrimitivePropertyDescriptor propertyDescriptor = outputColumns[i];
                string  putputColumnName = Utils.GenOutputColumnParameterName(propertyDescriptor.Column.Name);
                DbParam outputParam      = outputParams.Where(a => a.Name == putputColumnName).First();
                var     outputValue      = PublicHelper.ConvertObjectType(outputParam.Value, propertyDescriptor.PropertyType);
                outputColumns[i].SetValue(entity, outputValue);
            }

            return(entity);
        }
Beispiel #28
0
        public override DbExpression Visit(DbParameterExpression exp)
        {
            object paramValue = exp.Value;
            Type   paramType  = exp.Type.GetUnderlyingType();

            if (paramType.IsEnum)
            {
                paramType = Enum.GetUnderlyingType(paramType);
                if (paramValue != null)
                {
                    paramValue = Convert.ChangeType(paramValue, paramType);
                }
            }
            else if (paramType == PublicConstants.TypeOfBoolean)
            {
                paramType = PublicConstants.TypeOfInt32;
                if (paramValue != null)
                {
                    paramValue = (bool)paramValue ? Boxed_1 : Boxed_0;
                }

                if (exp.DbType == null || exp.DbType == DbType.Boolean)
                {
                    exp.DbType = DbType.Int32;
                }
            }

            if (paramValue == null)
            {
                paramValue = DBNull.Value;
            }

            DbParam p = this._parameters.Find(paramValue, paramType, exp.DbType);

            if (p != null)
            {
                this.SqlBuilder.Append(p.Name);
                return(exp);
            }

            string paramName = GenParameterName(this._parameters.Count);

            p = DbParam.Create(paramName, paramValue, paramType);

            if (paramValue.GetType() == PublicConstants.TypeOfString)
            {
                if (exp.DbType == DbType.AnsiStringFixedLength || exp.DbType == DbType.StringFixedLength)
                {
                    p.Size = ((string)paramValue).Length;
                }
                else if (((string)paramValue).Length <= 4000)
                {
                    p.Size = 4000;
                }
            }

            if (exp.DbType != null)
            {
                p.DbType = exp.DbType;
            }

            this._parameters.Add(p);
            this.SqlBuilder.Append(paramName);
            return(exp);
        }
 internal ParameterSyntax(object value)
 {
     Name = null;
     MetaId = null;
     _param = new DbParam() {Value = value };
 }
Beispiel #30
0
        public override void InsertRange <TEntity>(List <TEntity> entities, string table)
        {
            /*
             * 将 entities 分批插入数据库
             * 每批生成 insert into TableName(...) select ... from dual union all select ... from dual...
             * 对于 oracle,貌似速度提升不了...- -
             * #期待各码友的优化建议#
             */

            PublicHelper.CheckNull(entities);
            if (entities.Count == 0)
            {
                return;
            }

            int maxParameters = 1000;
            int batchSize     = 40; /* 每批实体大小,此值通过测试得出相对插入速度比较快的一个值 */

            TypeDescriptor typeDescriptor = EntityTypeContainer.GetDescriptor(typeof(TEntity));

            List <PropertyDescriptor> mappingPropertyDescriptors = typeDescriptor.PropertyDescriptors.Where(a => a.IsAutoIncrement == false).ToList();
            int maxDbParamsCount = maxParameters - mappingPropertyDescriptors.Count; /* 控制一个 sql 的参数个数 */

            DbTable dbTable     = string.IsNullOrEmpty(table) ? typeDescriptor.Table : new DbTable(table, typeDescriptor.Table.Schema);
            string  sqlTemplate = AppendInsertRangeSqlTemplate(dbTable, mappingPropertyDescriptors);

            Action insertAction = () =>
            {
                int            batchCount = 0;
                List <DbParam> dbParams   = new List <DbParam>();
                StringBuilder  sqlBuilder = new StringBuilder();
                for (int i = 0; i < entities.Count; i++)
                {
                    var entity = entities[i];

                    if (batchCount > 0)
                    {
                        sqlBuilder.Append(" UNION ALL ");
                    }

                    sqlBuilder.Append("SELECT ");
                    for (int j = 0; j < mappingPropertyDescriptors.Count; j++)
                    {
                        if (j > 0)
                        {
                            sqlBuilder.Append(",");
                        }

                        PropertyDescriptor mappingPropertyDescriptor = mappingPropertyDescriptors[j];

                        object val = mappingPropertyDescriptor.GetValue(entity);
                        if (val == null)
                        {
                            sqlBuilder.Append("NULL");
                            sqlBuilder.Append(" C").Append(j.ToString());
                            continue;
                        }

                        Type valType = val.GetType();
                        if (valType.IsEnum)
                        {
                            val     = Convert.ChangeType(val, Enum.GetUnderlyingType(valType));
                            valType = val.GetType();
                        }

                        if (Utils.IsToStringableNumericType(valType))
                        {
                            sqlBuilder.Append(val.ToString());
                        }
                        else if (val is bool)
                        {
                            if ((bool)val == true)
                            {
                                sqlBuilder.AppendFormat("1");
                            }
                            else
                            {
                                sqlBuilder.AppendFormat("0");
                            }
                        }
                        else
                        {
                            string  paramName = UtilConstants.ParameterNamePrefix + dbParams.Count.ToString();
                            DbParam dbParam   = new DbParam(paramName, val)
                            {
                                DbType = mappingPropertyDescriptor.Column.DbType
                            };
                            dbParams.Add(dbParam);
                            sqlBuilder.Append(paramName);
                        }

                        sqlBuilder.Append(" C").Append(j.ToString());
                    }

                    sqlBuilder.Append(" FROM DUAL");

                    batchCount++;

                    if ((batchCount >= 20 && dbParams.Count >= 400 /*参数个数太多也会影响速度*/) || dbParams.Count >= maxDbParamsCount || batchCount >= batchSize || (i + 1) == entities.Count)
                    {
                        sqlBuilder.Insert(0, sqlTemplate);
                        sqlBuilder.Append(") T");

                        string sql = sqlBuilder.ToString();
                        this.Session.ExecuteNonQuery(sql, dbParams.ToArray());

                        sqlBuilder.Clear();
                        dbParams.Clear();
                        batchCount = 0;
                    }
                }
            };

            Action fAction = insertAction;

            if (this.Session.IsInTransaction)
            {
                fAction();
            }
            else
            {
                /* 因为分批插入,所以需要开启事务保证数据一致性 */
                this.Session.BeginTransaction();
                try
                {
                    fAction();
                    this.Session.CommitTransaction();
                }
                catch
                {
                    if (this.Session.IsInTransaction)
                    {
                        this.Session.RollbackTransaction();
                    }
                    throw;
                }
            }
        }
Beispiel #31
0
 static void ChloeSqlQueryTest(int takeCount, int loops)
 {
     using (MsSqlContext context = new MsSqlContext(DbHelper.ConnectionString))
     {
         for (int i = 0; i < loops; i++)
         {
             int id   = 0;
             var list = context.SqlQuery <TestEntity>(string.Format("select top {0} * from TestEntity where Id>@Id", takeCount.ToString()), DbParam.Create("@Id", id)).ToList();
         }
     }
 }
Beispiel #32
0
 public DbCommandFactor(IObjectActivator objectActivator, string commandText, DbParam[] parameters)
 {
     this.ObjectActivator = objectActivator;
     this.CommandText = commandText;
     this.Parameters = parameters;
 }
Beispiel #33
0
        protected virtual IDbCommand PrepareCommand(string cmdText, DbParam[] parameters, CommandType cmdType, out List <OutputParameter> outputParameters)
        {
            outputParameters = null;

            IDbCommand cmd = this.DbConnection.CreateCommand();

            cmd.CommandText    = cmdText;
            cmd.CommandType    = cmdType;
            cmd.CommandTimeout = this.CommandTimeout;
            if (this.IsInTransaction)
            {
                cmd.Transaction = this.DbTransaction;
            }

            if (parameters != null)
            {
                for (int i = 0; i < parameters.Length; i++)
                {
                    DbParam param = parameters[i];
                    if (param == null)
                    {
                        continue;
                    }

                    if (param.ExplicitParameter != null)/* 如果存在创建好了的 IDbDataParameter,则直接用它。同时也忽视了 DbParam 的其他属性 */
                    {
                        cmd.Parameters.Add(param.ExplicitParameter);
                        continue;
                    }

                    Type parameterType;
                    if (param.Value == null || param.Value == DBNull.Value)
                    {
                        parameterType = param.Type ?? typeof(object);
                    }
                    else
                    {
                        parameterType = param.Value.GetType();
                        if (parameterType.IsEnum)
                        {
                            parameterType = Enum.GetUnderlyingType(parameterType);
                        }
                    }

                    IDbDataParameter           parameter   = cmd.CreateParameter();
                    Infrastructure.MappingType mappingType = MappingTypeSystem.GetMappingType(parameterType);
                    mappingType.DbParameterAssembler.SetupParameter(parameter, param);

                    cmd.Parameters.Add(parameter);

                    OutputParameter outputParameter = null;
                    if (param.Direction == ParamDirection.Output || param.Direction == ParamDirection.InputOutput)
                    {
                        outputParameter = new OutputParameter(param, parameter);
                        if (outputParameters == null)
                        {
                            outputParameters = new List <OutputParameter>();
                        }
                        outputParameters.Add(outputParameter);
                    }
                }
            }

            return(cmd);
        }
 internal ParameterSyntax(string name = null, MetaId metaId = null, DbParam param = null)
 {
     Name = name;
     MetaId = metaId;
     _param = param;
 }