コード例 #1
0
        /// <summary>
        /// 创建不等于条件表达式
        /// </summary>
        /// <param name="fieldname">左边字段名称</param>
        /// <param name="parametname">右边参数名称</param>
        /// <param name="parametvalue">右边参数值</param>
        /// <param name="paramet">返回与条件表达式一起使用的参数表达式</param>
        /// <returns></returns>
        internal static string CreateNotEqWhere(
            string fieldname,
            string parametname,
            object parametvalue,
            out IDataParamet paramet)
        {
            paramet = null;
            if (string.IsNullOrEmpty(fieldname) || string.IsNullOrEmpty(parametname))
            {
                return(null);
            }
            string left = fieldname;

            if (MsSqlServerHelper.IsValidFieldName(fieldname))
            {
                left = MsSqlServerHelper.GetFeildNameInSqlExpress(fieldname);
            }
            if (parametvalue == null)
            {
                return(string.Format("{0} IS NOT NULL", left));
            }
            string right = MsSqlServerHelper.GetParametName(parametname);

            paramet = new DataParamet()
            {
                Direction = System.Data.ParameterDirection.Input, Name = parametname, Value = parametvalue, ValueType = parametvalue.GetType()
            };
            return(string.Format("{0}<>{1}", left, right));
        }
コード例 #2
0
        /// <summary>
        /// 生成删除数据的Sql表达式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="deleteItem"></param>
        /// <param name="paramet"></param>
        /// <returns></returns>
        internal static string GetDeleteSql <T>(
            T deleteItem,
            out IEnumerable <IDataParamet> paramet)
        {
            paramet = null;
            if (deleteItem == null)
            {
                throw new ObjectIsNullException(LocalResource.DeleteItem);
            }

            StringBuilder       wheresql = new StringBuilder();
            List <IDataParamet> paramets = new List <IDataParamet>();
            IDataModel          model    = typeof(T).GetDataModel();
            string namehz = GetIdKeyStringValues(deleteItem, model);
            int    c      = 0;

            foreach (var k in model.PrimaryKeys)
            {
                IDataFieldModel f = model.Fields[k.Name];
                DataParamet     p = AppendParamet(paramets, namehz, f, deleteItem);
                if (c == 0)
                {
                    wheresql.Append(string.Format("[{0}]={1}", f.Name, p.Name));
                }
                else
                {
                    wheresql.Append(string.Format(" AND [{0}]={1}", f.Name, p.Name));
                }
                c++;
            }
            if (wheresql.Length == 0) //没有任何主键信息
            {
                throw new NotFoundPrimaryKeyException(typeof(T));
            }
            paramet = paramets.ToArray();
            string sdf = model.GetSoftDeleteFieldName();

            if (!string.IsNullOrEmpty(sdf))
            {
                return(string.Format("UPDATE {0} SET {1}=1 WHERE {2}",
                                     MsSqlServerHelper.GetFeildNameInSqlExpress(model.Name),
                                     MsSqlServerHelper.GetFeildNameInSqlExpress(sdf),
                                     wheresql.ToString()));
            }
            else
            {
                return(string.Format("DELETE {0} WHERE {1}", GetFeildNameInSqlExpress(model.Name), wheresql.ToString()));
            }
        }
コード例 #3
0
        /// <summary>
        /// 添加参数到paramets中去
        /// </summary>
        /// <param name="paramets">参数集合,返回的参数将添加到该集合中,如果不为空的话</param>
        /// <param name="ft">参数后缀,可为为null</param>
        /// <param name="field">字段信息</param>
        /// <param name="value">行值</param>
        /// <returns></returns>
        private static DataParamet AppendParamet(List <IDataParamet> paramets, string parhz, IDataFieldModel field, object rowvalue)
        {
            object value = field.GetModelFieldValue(rowvalue);

            value = ConvertFieldValueToDbValue(field, value);
            DataParamet p = new DataParamet()
            {
                Name      = GenerateParametName(field.Name, parhz),
                Value     = value,
                ValueType = field.GetClrType()
            };
            int s = field.GetFieldSize();

            if (s > 0)
            {
                p.ValueSize = s;
            }
            if (paramets != null)
            {
                paramets.Add(p);
            }
            return(p);
        }
コード例 #4
0
        /// <summary>
        /// 创建以parametvalue开始或在parametvalue中以列的值开始的条件表达式
        /// </summary>
        /// <param name="fieldname">列字段名称</param>
        /// <param name="parametname">参数名称</param>
        /// <param name="parametvalue">参数值</param>
        /// <param name="parametIsExpress">是否是取在parametvalue中以列的值开始的条件表达式</param>
        /// <param name="paramet"></param>
        /// <returns></returns>
        internal static string CreateFirstIndexOfWhere(
            string fieldname,
            string parametname,
            string parametvalue,
            bool parametIsExpress,
            out IDataParamet paramet)
        {
            paramet = null;
            if (string.IsNullOrEmpty(fieldname) || string.IsNullOrEmpty(parametname))
            {
                return(null);
            }
            string left = fieldname;

            if (MsSqlServerHelper.IsValidFieldName(fieldname))
            {
                left = MsSqlServerHelper.GetFeildNameInSqlExpress(fieldname);
            }
            if (parametvalue == null)
            {
                return(null);
            }
            string right = MsSqlServerHelper.GetParametName(parametname);

            paramet = new DataParamet()
            {
                Direction = System.Data.ParameterDirection.Input, Name = parametname, Value = parametvalue, ValueType = parametvalue.GetType()
            };
            if (parametIsExpress)
            {
                return(string.Format("CHARINDEX({1},{0})=1", left, right));
            }
            else
            {
                return(string.Format("CHARINDEX({0},{1})=1", left, right));
            }
        }
コード例 #5
0
        /// <summary>
        /// 生成修改数据的Sql表达式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="updateItem"></param>
        /// <param name="updaterange"></param>
        /// <param name="updatefields"></param>
        /// <param name="paramet"></param>
        /// <returns></returns>
        internal static string GetUpdateSql <T>(
            T updateItem,
            FieldSelectRange updaterange,
            IEnumerable <string> updatefields,
            out IEnumerable <IDataParamet> paramet)
            where T : class
        {
            paramet = null;
            if (updateItem == null)
            {
                throw new ObjectIsNullException(LocalResource.UpdateItem);
            }
            StringBuilder       wheresql = new StringBuilder();
            StringBuilder       setsql   = new StringBuilder();
            List <IDataParamet> paramets = new List <IDataParamet>();
            IDataModel          model    = typeof(T).GetDataModel();
            string namehz = GetIdKeyStringValues(updateItem, model);
            int    c      = 0;

            foreach (var k in model.PrimaryKeys)
            {
                IDataFieldModel f = model.Fields[k.Name];
                DataParamet     p = AppendParamet(paramets, namehz, f, updateItem);
                if (c == 0)
                {
                    wheresql.Append(string.Format("[{0}]={1}", f.Name, p.Name));
                }
                else
                {
                    wheresql.Append(string.Format(" AND [{0}]={1}", f.Name, p.Name));
                }
                c++;
            }
            if (wheresql.Length == 0) //没有任何主键信息
            {
                throw new NotFoundPrimaryKeyException(typeof(T));
            }
            IDataFieldModelCollection fields = model.Fields;

            c = 0;
            foreach (var f in fields)
            {
                if (f.IsRowVersion())
                {
                    continue;
                }
                if (f.GetDbGeneratedDefine() != null)
                {
                    continue;
                }
                if (f.IsPrimaryKey() != null)
                {
                    continue;
                }
                switch (updaterange)
                {
                case FieldSelectRange.All: break;

                case FieldSelectRange.OnlyFields:
                {
                    if (updatefields == null)
                    {
                        continue;
                    }
                    if (updatefields.FirstOrDefault(
                            ff => string.Equals(ff, f.Name, StringComparison.OrdinalIgnoreCase)) == null)
                    {
                        continue;
                    }
                    break;
                }

                case FieldSelectRange.IgnoreFields:
                {
                    if (updatefields != null)
                    {
                        if (updatefields.FirstOrDefault(
                                ff => string.Equals(ff, f.Name, StringComparison.OrdinalIgnoreCase)) != null)
                        {
                            continue;
                        }
                    }
                    break;
                }
                }
                DataParamet p = AppendParamet(paramets, namehz, f, updateItem);
                if (c == 0)
                {
                    setsql.AppendLine(string.Format("[{0}]={1}", f.Name, p.Name));
                }
                else
                {
                    setsql.AppendLine(string.Format(",[{0}]={1}", f.Name, p.Name));
                }
                c++;
            }
            if (setsql.Length == 0)
            {
                return(null);
            }

            paramet = paramets.ToArray();
            return(string.Format("UPDATE [{0}] SET {1} WHERE {2}", model.Name, setsql.ToString(), wheresql.ToString()));
        }
コード例 #6
0
        /// <summary>
        /// 生成添加数据的Sql表达式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="newitem"></param>
        /// <param name="par"></param>
        /// <returns></returns>
        internal static string GetAddNewSql <T>(
            T newitem, out AddNewSqlExpressOutputParamet par)
            where T : class
        {
            par = null;
            if (newitem == null)
            {
                throw new ObjectIsNullException(LocalResource.AddNewItem);
            }
            StringBuilder             cols     = new StringBuilder();
            StringBuilder             values   = new StringBuilder();
            StringBuilder             setIdsql = new StringBuilder();
            IDataModel                model    = typeof(T).GetDataModel();
            string                    namehz   = GetIdKeyStringValues(newitem, model);
            List <IDataParamet>       paramets = new List <IDataParamet>();
            List <string>             outputGenerateFieldNames = new List <string>();
            IDataFieldModelCollection fields = model.Fields;
            int c = 0;

            foreach (var f in fields)
            {
                if (f.IsRowVersion())
                {
                    continue;
                }
                if (f.GetDbGeneratedDefine() != null)
                {
                    if (f.IsPrimaryKey() != null)
                    {
                        DataParamet p = AppendParamet(paramets, namehz, f, newitem);
                        p.Direction = System.Data.ParameterDirection.InputOutput;
                        outputGenerateFieldNames.Add(f.Name);
                        if (setIdsql.Length == 0)
                        {
                            setIdsql.AppendFormat("SET {0} = SCOPE_IDENTITY()", p.Name);
                        }
                        else
                        {
                            setIdsql.AppendFormat("\r\n SET {0} = SCOPE_IDENTITY()", p.Name);
                        }
                    }
                    continue;
                }
                DataParamet fieldvalue = AppendParamet(paramets, namehz, f, newitem);
                if (c == 0)
                {
                    cols.Append(string.Format("[{0}]", f.Name));
                    values.Append(fieldvalue.Name);
                }
                else
                {
                    cols.AppendFormat(",[{0}]", f.Name);
                    values.AppendFormat(",{0}", fieldvalue.Name);
                }
                c++;
            }
            par = new AddNewSqlExpressOutputParamet(
                outputGenerateFieldNames.ToArray(),
                paramets.ToArray(),
                namehz);
            if (setIdsql.Length == 0)
            {
                return(string.Format("INSERT INTO [{0}] ({1}) \r\n VALUES({2})", model.Name, cols.ToString(), values.ToString()));
            }
            else
            {
                return(string.Format("INSERT INTO [{0}] ({1}) \r\n VALUES({2}) \r\n {3}", model.Name, cols.ToString(), values.ToString(), setIdsql.ToString()));
            }
        }