Exemple #1
0
            public static string UpdateBuilder(SRO obj, out IMyDbParameter[] prams)
            {
                List <IMyDbParameter> pramList = new List <IMyDbParameter>();
                Type type = obj.GetType();

                StringBuilder sql = new StringBuilder("UPDATE [{0}] SET ");

                bool isModified = false;

                IMyPropertyInfo[] myPropertys = PropertyInfoProxy.GetProperties(obj.GetType());
                foreach (IMyPropertyInfo property in myPropertys)
                {
                    if (property.IsSave == false || property.Name == "CreatedDate" || property.Name == "Version")
                    {//判断是否保存
                        continue;
                    }

                    object pValue = property.GetValue(obj);
                    if (property.Name == "Id" || property.Name == "LastAlterDate")
                    {
                        pramList.Add(ParameterBuilder(property, pValue));
                        continue;
                    }

                    if (property.PropertyType == typeof(DateTime) && (DateTime)pValue == DateTime.MinValue && obj.GetOriginalValue(property.Name) == null)
                    {
                        continue;
                    }
                    else if (object.Equals(obj.GetOriginalValue(property.Name), pValue))
                    {
                        continue;
                    }

                    if (!isModified)
                    {
                        isModified = true;
                    }

                    sql.Append("[");
                    sql.Append(property.Name);
                    sql.Append("]=@");
                    sql.Append(property.Name);
                    sql.Append(",");

                    pramList.Add(ParameterBuilder(property, pValue));
                }

                if (isModified == false)
                {
                    prams = null;
                    return(null);
                }

                prams = pramList.ToArray();
                sql.Append(string.Format("[LastAlterDate]=@LastAlterDate,[Version]={0} WHERE [Id]=@Id AND [Version]={1}",
                                         ++obj.Version, (long)obj.GetOriginalValue("Version")));

                return(sql.ToString());
            }
            public static string UpdateBuilder(SRO obj, out IMyDbParameter[] prams)
            {
                List <IMyDbParameter> pramList = new List <IMyDbParameter>();
                Type type = obj.GetType();

                StringBuilder sql = new StringBuilder("UPDATE [{0}] SET ");

                bool isModified = false;

                IMyPropertyInfo[] myPropertys = PropertyInfoProxy.GetProperties(obj.GetType());
                foreach (IMyPropertyInfo property in myPropertys)
                {
                    if (property.IsSave == false || property.Name == "CreatedDate" || property.Name == "LastAlterDate")
                    {//判断是否保存
                        continue;
                    }

                    object pValue = property.GetValue(obj);
                    if (property.Name == "Id")
                    {
                        pramList.Add(ParameterBuilder(property, pValue));
                        continue;
                    }

                    if (object.Equals(obj.GetOriginalValue(property.Name), pValue))
                    {
                        continue;
                    }

                    isModified = true;

                    sql.Append("[");
                    sql.Append(property.Name);
                    sql.Append("]=@");
                    sql.Append(property.Name);
                    sql.Append(",");

                    pramList.Add(ParameterBuilder(property, pValue));
                }

                if (isModified == false)
                {
                    prams = null;
                    return(null);
                }

                prams = pramList.ToArray();
                sql.Append(string.Format("[LastAlterDate]='{0}' WHERE [Id]=@Id", obj.LastAlterDate));

                return(sql.ToString());
            }
        private static void Update(SRO obj)
        {
            Type type = obj.GetType();

            IMyDbParameter[] prams;
            string           updateSql = SqlBuilder.UpdateBuilder(obj, out prams);

            if (string.IsNullOrEmpty(updateSql))
            {
                LogProxy.InfoFormat(OBJECTSISNOTMODIFIED, obj.GetType(), obj.Id);
                return;
            }

            Save(obj, updateSql, prams);
        }
        private static void Save(SRO obj, string sql, IMyDbParameter[] prams)
        {
            string tableName;
            Type   type = obj.GetType();

            string[]   aliases = obj.Aliases;
            IDbOperate dbOperate;

            if (aliases.Length == 0)
            {
                tableName = GetTableName(obj, null);

                dbOperate = DbProxy.Create(null, type);
                dbOperate.ExecuteNonQuery(string.Format(sql, tableName), prams);
            }
            else
            {
                foreach (string alias in aliases)
                {
                    tableName = GetTableName(obj, alias);

                    dbOperate = DbProxy.Create(alias, type);
                    dbOperate.ExecuteNonQuery(string.Format(sql, tableName), prams);
                }
            }
        }
Exemple #5
0
        private static void Insert(SRO obj)
        {
            Type type = obj.GetType();

            IMyDbParameter[] prams;
            string           insertSql = SqlBuilder.InsertBuilder(obj, out prams);

            Save(obj, insertSql, prams);
        }
Exemple #6
0
        private static void Save(SRO obj, string sql, IMyDbParameter[] prams)
        {
            string tableName;
            string executeSql;
            int    executeCnt;
            Type   type = obj.GetType();

            string[]   aliases = obj.Aliases;
            IDbOperate dbOperate;

            if (aliases.Length == 0)
            {
                tableName  = GetTableName(obj, null);
                executeSql = string.Format(sql, tableName);

                dbOperate  = DbProxy.Create(null, type);
                executeCnt = dbOperate.ExecuteNonQuery(executeSql, prams);
                if (executeCnt != 1)
                {
                    string jsonPrams = JsonConvert.SerializeObject(prams);
                    LogProxy.Error(string.Format(SAVEFAIL, executeSql, jsonPrams), true);
                }
            }
            else
            {
                foreach (string alias in aliases)
                {
                    tableName  = GetTableName(obj, alias);
                    executeSql = string.Format(sql, tableName);

                    dbOperate  = DbProxy.Create(alias, type);
                    executeCnt = dbOperate.ExecuteNonQuery(executeSql, prams);
                    if (executeCnt != 1)
                    {
                        string jsonPrams = JsonConvert.SerializeObject(prams);
                        LogProxy.Error(string.Format(SAVEFAIL, executeSql, jsonPrams), true);
                    }
                }
            }
        }
Exemple #7
0
            private static IMyDbParameter[] InsertParametersBuilder(SRO obj)
            {
                List <IMyDbParameter> prams = new List <IMyDbParameter>();

                IMyPropertyInfo[] myPropertys = PropertyInfoProxy.GetProperties(obj.GetType());

                foreach (IMyPropertyInfo property in myPropertys)
                {
                    if (property.IsSave == false)
                    {//判断是否保存
                        continue;
                    }

                    object pValue = property.GetValue(obj);
                    if (pValue == null)
                    {
                        pValue = DBNull.Value;
                    }

                    prams.Add(ParameterBuilder(property, pValue));
                }

                return(prams.ToArray());
            }
Exemple #8
0
 public static string InsertBuilder(SRO obj, out IMyDbParameter[] prams)
 {
     prams = InsertParametersBuilder(obj);
     return(GetInsertSql(obj.GetType()));
 }