示例#1
0
        private CPQuery GeUpdateQuery()
        {
            if (_setProxy == null)
            {
                throw new InvalidOperationException("请先调用Set方法。");
            }
            if (_whereProxy == null)
            {
                throw new InvalidOperationException("请先调用Where方法。");
            }

            CPQuery update = _setProxy.GetUpdateQuery(null);

            CPQuery where = _whereProxy.GetWhereQuery();

            CPQuery query = update + where;

            return(query);
        }
示例#2
0
        /// <summary>
        /// 根据指定的实体属性,生成UPDATE的语句,并执行数据库插入操作
        /// </summary>
        /// <returns></returns>
        public int Update()
        {
            if (_setProxy == null)
            {
                throw new InvalidOperationException("请先调用Set方法。");
            }
            if (_whereProxy == null)
            {
                throw new InvalidOperationException("请先调用Where方法。");
            }

            CPQuery update = _setProxy.GetUpdateQuery(null);

            CPQuery where = _whereProxy.GetWhereQuery();

            CPQuery query = update + where;

            return(query.ExecuteNonQuery());
        }
示例#3
0
        /// <summary>
        /// 根据已修改的实体属性,生成INSERT语句,并执行数据库插入操作,
        /// 注意:此方法只能在实体的代理对象上调用。
        /// </summary>
        /// <returns>数据库操作过程中影响的行数</returns>
        public int Insert()
        {
            IEntityProxy proxy = this as IEntityProxy;

            if (proxy == null)
            {
                throw new InvalidOperationException("请在调用BeginEdit()的返回值对象上调用Insert方法。");
            }


            CPQuery insert = GetInsertQuery();

            if (insert == null)
            {
                return(-1);
            }

            proxy.ClearChangeFlags();              // 清除修改标记,防止多次调用
            return(insert.ExecuteNonQuery());
        }
示例#4
0
        /// <summary>
        /// 根据已修改的实体属性,生成DELETE查询条件,并执行数据库插入操作,
        /// 注意:此方法只能在实体的代理对象上调用。
        /// </summary>
        /// <returns>数据库操作过程中影响的行数</returns>
        public int Delete()
        {
            IEntityProxy proxy = this as IEntityProxy;

            if (proxy == null)
            {
                throw new InvalidOperationException("请在调用BeginEdit()的返回值对象上调用Delete方法。");
            }


            CPQuery where = GetWhereQuery();
            if (where == null)
            {
                return(-1);                             // 不允许没有WHERE条件的删除,如果确实需要,请手工写SQL
            }
            CPQuery query = this.DbContext.CreateCPQuery()
                            + "DELETE FROM " + GetTableName() + where;

            proxy.ClearChangeFlags();              // 清除修改标记,防止多次调用
            return(query.ExecuteNonQuery());
        }
示例#5
0
        private CPQuery GetInsertQueryCommand()
        {
            IEntityProxy proxy = this as IEntityProxy;

            if (proxy == null)
            {
                throw new InvalidOperationException("请在调用BeginEdit()的返回值对象上调用Insert方法。");
            }


            CPQuery insert = GetInsertQuery();

            if (insert == null)
            {
                return(null);
            }

            proxy.ClearChangeFlags();              // 清除修改标记,防止多次调用

            return(insert);
        }
示例#6
0
        internal CPQuery GetInsertQuery()
        {
            IEntityProxy proxy = this as IEntityProxy;

            string[] names  = proxy.GetChangeNames();
            object[] values = proxy.GetChangeValues();
            if (names.Length == 0)
            {
                return(null);                       // 没有设置任何属性,应该不会发生吧?
            }
            CPQuery query = this.DbContext.CreateCPQuery();

            query = query
                    + "INSERT INTO " + GetTableName() + "("
                    + string.Join(",", names.ToArray())
                    + ") VALUES (";


            for (int i = 0; i < values.Length; i++)
            {
                object value = values[i];
                if (value == null)
                {
                    query = query + "NULL";
                }
                else
                {
                    query = query + new QueryParameter(value);
                }

                if (i < values.Length - 1)
                {
                    query.AppendSql(",");
                }
            }

            query.AppendSql(")");

            return(query);
        }
示例#7
0
        private void SetInArrayParameter(string placeholder, ICollection collection)
        {
            StringBuilder sb = new StringBuilder(128);

            // 优先检查 int[], Guid[] 类型,并转成SQL语句中的一部分
            // 因为这些强类型的数据本身是安全的,不存在注入,就不转换成命令参数。
            CPQuery.ArrayToString(collection, sb);

            if (sb.Length == 0)                 // 如果不是 int[], Guid[] ,就转换成命令参数

            {
                foreach (object obj in collection)
                {
                    string name = "x" + (_paramIndex++).ToString();

                    DbParameter parameter = _command.CreateParameter();
                    parameter.ParameterName = ParaNameBuilder.GetParaName(name);
                    parameter.Value         = obj;
                    _command.Parameters.Add(parameter);

                    if (sb.Length > 0)
                    {
                        sb.Append(',');
                    }

                    sb.Append(ParaNameBuilder.GetPlaceholder(name));
                }
            }

            if (sb.Length == 0)
            {
                sb.Append("NULL");
            }

            _command.CommandText = _command.CommandText.Replace(placeholder, sb.ToString());
        }
示例#8
0
        /// <summary>
        /// 根据指定的实体属性,生成UPDATE的语句,并执行数据库插入操作
        /// </summary>
        /// <returns></returns>
        public int Update()
        {
            CPQuery query = GeUpdateQuery();

            return(query.ExecuteNonQuery());
        }
示例#9
0
 /// <summary>
 /// 将指定的字符串(T-SQL的片段)转成CPQuery对象
 /// </summary>
 /// <param name="sql">T-SQL的片段的字符串</param>
 /// <returns>包含T-SQL的片段的CPQuery对象</returns>
 public static CPQuery AsCPQuery(this string sql)
 {
     return(CPQuery.Create(sql));
 }
示例#10
0
        /// <summary>
        /// 根据Where调用产生的查询条件获取实体对象列表
        /// </summary>
        /// <returns></returns>
        public async Task <List <T> > ToListAsync()
        {
            CPQuery query = GetSelectQuery();

            return(await query.ToListAsync <T>());
        }
示例#11
0
        /// <summary>
        /// 根据Where调用产生的查询条件获取实体对象列表
        /// </summary>
        /// <returns></returns>
        public List <T> ToList()
        {
            CPQuery query = GetSelectQuery();

            return(query.ToList <T>());
        }
示例#12
0
        /// <summary>
        /// 根据Where调用产生的查询条件获取单个实体对象
        /// </summary>
        /// <returns></returns>
        public async Task <T> ToSingleAsync()
        {
            CPQuery query = GetSelectQuery();

            return(await query.ToSingleAsync <T>());
        }
示例#13
0
        /// <summary>
        /// 根据Where调用产生的查询条件获取单个实体对象
        /// </summary>
        /// <returns></returns>
        public T ToSingle()
        {
            CPQuery query = GetSelectQuery();

            return(query.ToSingle <T>());
        }
示例#14
0
        /// <summary>
        /// 根据指定的实体属性,生成UPDATE的语句,并执行数据库插入操作
        /// </summary>
        /// <returns></returns>
        public async Task <int> UpdateAsync()
        {
            CPQuery query = GeUpdateQuery();

            return(await query.ExecuteNonQueryAsync());
        }
示例#15
0
        /// <summary>
        /// 根据指定的实体属性,生成INSERT语句,并执行数据库插入操作
        /// </summary>
        /// <returns></returns>
        public int Insert()
        {
            CPQuery query = GetInsertQuery();

            return(query.ExecuteNonQuery());
        }
示例#16
0
        /// <summary>
        /// 根据指定的实体属性,生成DELETE查询条件,并执行数据库插入操作
        /// </summary>
        /// <returns></returns>
        public int Delete()
        {
            CPQuery query = GetDeleteQuery();

            return(query.ExecuteNonQuery());
        }
示例#17
0
        /// <summary>
        /// 根据指定的实体属性,生成INSERT语句,并执行数据库插入操作
        /// </summary>
        /// <returns></returns>
        public async Task <int> InsertAsync()
        {
            CPQuery query = GetInsertQuery();

            return(await query.ExecuteNonQueryAsync());
        }