Esempio n. 1
0
        /// <summary>
        /// 更新DataSet,如果DataSet中有行添加、删除或数据更新则按每条数据执行相应的SQL语句。
        /// 必须对已用Query对象查询出来的DataSet或者在Command中指定TableName。
        /// </summary>
        /// <param name="ds"></param>
        public void UpdateDataSet <T>(DataSet ds, QueryConditional <T> whereObject = null) where T : DbObject
        {
            var    table     = ds.Tables[0];
            string tableName = string.Empty;

            if (whereObject != null)
            {
                tableName = DbMetaDataManager.GetTableName(typeof(T));
            }
            else
            {
                tableName = table.TableName;
            }

            if (string.IsNullOrEmpty(tableName))
            {
                throw new InvalidOperationException("表名不能为空!");
            }
            string whereSQL = null;

            if (whereObject != null)
            {
                whereSQL = whereObject.ToString();
            }
            Provider.UpdateDataSet(ds, whereSQL);
        }
Esempio n. 2
0
        /// <summary>
        /// 立即执行删除记录语句
        /// </summary>
        /// <typeparam name="TModel">模型名称</typeparam>
        /// <returns>将返回一个操作接口,此接口会有一个Where方法和Go方法,Where表示要添加条件,Go则表示立即执行语句。</returns>
        ///<example>session.Delete().Where(u => u.ID == "5");</example>
        public IOperatorWhere <TModel> Delete <TModel>() where TModel : DbObject
        {
            var    tableName = DbMetaDataManager.GetTableName(typeof(TModel));
            string template  = string.Format("DELETE From {0} Where 1=1", tableName);

            return(new OperatorWhereObject <TModel>(Provider, template, null));
        }
Esempio n. 3
0
        /// <summary>
        /// 立即返回数据DataSet
        /// </summary>
        /// <returns>数据DataSet</returns>
        public DataSet ToDataSet()
        {
            var tableName = DbMetaDataManager.GetTableName(ModelType);

            return(Provider.Query(new Command(this.ToString())
            {
                TableName = tableName
            }));
        }
Esempio n. 4
0
        /// <summary>
        /// 立即执行更新语句
        /// </summary>
        /// <typeparam name="TModel">模型名称</typeparam>
        /// <param name="objExp">更新对象表达式,表示要更新的列信息</param>
        /// <returns>将返回一个操作接口,此接口会有一个Where方法和Go方法,Where表示要添加条件,Go则表示立即执行语句。</returns>
        /// <example> session.Update(u => new AdminUser1 {ID = "5", NameA = "maxzhang"}).Where(p => p.Age > 5).Go</example>
        public IOperatorWhere <TModel> Update <TModel>(Expression <Func <TModel, object> > objExp) where TModel : DbObject
        {
            var            tableName = DbMetaDataManager.GetTableName(typeof(TModel));
            FieldsFormater format    = new FieldsFormater(Provider);

            format.Visit(objExp);
            string paramterNameAndValues = string.Join(",", format.Parameters.Select(kv => kv.Key + "=" + kv.Value.Name));

            string template = string.Format("Update {0} SET {1} Where 1=1", tableName, paramterNameAndValues);
            var    ps       = format.Parameters.Values.Where(p => p.IsMethodType == false).ToList();

            return(new OperatorWhereObject <TModel>(Provider, template, ps));
        }
Esempio n. 5
0
        /// <summary>
        /// 立即执行插入语句
        /// </summary>
        /// <typeparam name="TModel">模型名称</typeparam>
        /// <param name="objExp">插入对象表达式,表达要插入的列信息</param>
        /// <example> session.Insert(u => new AdminUser1 {ID = "5", NameA = "maxzhang"}).Where(p => p.Age > 5).Go;</example>
        public void Insert <TModel>(Expression <Func <TModel, object> > objExp) where TModel : DbObject
        {
            var            tableName = DbMetaDataManager.GetTableName(typeof(TModel));
            FieldsFormater format    = new FieldsFormater(Provider);

            format.Visit(objExp);
            string fieldNames    = string.Join(",", format.Parameters.Keys);
            string paramterNames = string.Join(",", format.Parameters.Values.Select(p => p.Name));
            string template      = string.Format("INSERT INTO {0}({1}) VALUES({2})", tableName, fieldNames, paramterNames);
            var    ps            = format.Parameters.Values.Where(p => p.IsMethodType == false).ToList();
            var    command       = new Command(template, ps);

            Provider.Execute(command);
        }
Esempio n. 6
0
        /// <summary>
        /// 返回分页数据
        /// </summary>
        /// <typeparam name="TModel"></typeparam>
        /// <param name="query"></param>
        /// <param name="pageIndex">第几页</param>
        /// <param name="pageSize">共几页</param>
        /// <returns>延时执行查询,在调用时</returns>
        public static IEnumerable <TModel> GetPager <TModel>(this SelectQuery <TModel> query, int pageIndex, int pageSize)
        {
            query.SqlBuilder.Clear();
            query.SqlBuilder.IsFunction = true;
            var tableName = DbMetaDataManager.GetTableName(typeof(TModel));

            string where = query.WhereCreater.ToString().Replace("Where 1=1  AND", "");
            Regex regex = new Regex(@"[a-z|A-Z]+\w*\.");

            where = regex.Replace(where, @"");

            var key = DbMetaDataManager.GetKeys(typeof(TModel))[0];

            query.SqlBuilder.FuncSQL = string.Format(@"EXEC sp_getdatapage {0}, {1}, '[{2}]', '{3}', '{4}'", pageIndex, pageSize, tableName, where, key);
            return(query.ToLazyList());
        }
Esempio n. 7
0
        public SelectQuery(IDataProvider provider)
        {
            if (provider == null)
            {
                throw new ArgumentNullException("provider");
            }
            Init(provider);
            //MetaType metaType = MetaManager.GetMetaType();


            var tableName    = DbMetaDataManager.GetTableName(ModelType);
            var metaDataList = DbMetaDataManager.GetMetaDatas(ModelType);

            SqlBuilder.AddFromTable(tableName, TableIndex);
            foreach (var parameter in metaDataList)
            {
                SqlBuilder.AddField(string.Format("T{0}.{1}", TableIndex, parameter.FieldName));
            }
        }
Esempio n. 8
0
        /// <summary>
        /// 得到表名
        /// </summary>
        static private string GetTableName(Type tmodel)
        {
            var tableName = DbMetaDataManager.GetTableName(tmodel);

            return(tableName);
        }
Esempio n. 9
0
        /// <summary>
        /// 访问常量
        /// </summary>
        /// <param name="c"></param>
        /// <returns></returns>
        protected override Expression VisitConstant(ConstantExpression c)
        {
            IQueryable q = c.Value as IQueryable;

            if (q != null)
            {
                var tableName = DbMetaDataManager.GetTableName(q.ElementType);

                sb.Append(tableName);

                sb.Append(" ");
                if (Ass.Keys.Count > 0)
                {
                    sb.Append(Ass[q.ElementType]);
                }
                else
                {
                    sb.Append("T");
                }
            }
            else if (c.Value == null)
            {
                sb.Append("NULL");
            }
            else
            {
                switch (Type.GetTypeCode(c.Value.GetType()))
                {
                case TypeCode.Boolean:
                    sb.Append(((bool)c.Value) ? 1 : 0);
                    break;

                case TypeCode.DateTime:
                    string dtfs = "'{0}'";
                    if (!string.IsNullOrEmpty(Provider.DateTimeFlagString))
                    {
                        dtfs = Provider.DateTimeFlagString;
                    }
                    sb.AppendFormat(dtfs, c.Value);
                    break;

                case TypeCode.String:
                    sb.Append("'");
                    sb.Append(c.Value);
                    sb.Append("'");
                    break;

                case TypeCode.Object:
                    var qeq = c.Value as QueryConditional;
                    if (qeq != null)
                    {
                        sb.Append(qeq.ToString());
                    }
                    else if (c.Type.IsArray)               //
                    {
                        var array = c.Value as Array;
                        if (array == null || array.Length == 0)
                        {
                            throw new InvalidOperationException(string.Format("语句中的数组数据不能为空值。", c.Value));
                        }
                        object elementOne  = array.GetValue(0);
                        Type   elementType = elementOne.GetType();
                        string format      = "{0}";
                        if (elementType == typeof(string))
                        {
                            format = "'{0}'";
                        }
                        StringBuilder value = new StringBuilder();
                        value.Append("(");
                        for (int i = 0; i < array.Length; i++)
                        {
                            value.AppendFormat(format, array.GetValue(i));
                            if (i != array.Length - 1)
                            {
                                value.Append(",");
                            }
                        }
                        value.Append(")");
                        sb.Append(value.ToString());
                    }
                    else
                    {
                        throw new NotSupportedException(string.Format("The constant for '{0}' is not supported", c.Value));
                    }
                    break;

                default:
                    sb.Append(c.Value);
                    break;
                }
            }
            return(c);
        }