示例#1
0
        public bool Execute()
        {
            DbQueryBuilder builder = _subQuery.Build(_query.DataSource, 0, false);
            StringBuilder  sb      = new StringBuilder();

            sb.Append("INSERT INTO ");
            sb.Append(_query.Provider.EscapeName(DbTable.GetTableName <T>()));
            sb.Append(' ');
            sb.Append(GetNames());
            sb.Append(builder.Sql);
            sb.Append(';');
            return(DbTable.InsertImpl(_query.DataSource, sb.ToString(), builder.Parameters));
        }
示例#2
0
        DbQueryBuilder IDbUpdateQuery.Build(DataSource ds, ref int count)
        {
            DbQueryBuilder builder    = _query.Build(ds, ref count);
            DbQueryBuilder subBuilder = _subQuery.Build(ds, 0, false);

            builder.Append('(');
            builder.Append(subBuilder.Sql);
            builder.Append(')');
            builder.Append(subBuilder.Parameters);
            return(builder);
        }
示例#3
0
        internal DbQueryBuilder Build(DataSource ds)
        {
            if (_type == DbWhereType.Unkown)
            {
                throw new ArgumentException();
            }
            switch (_type)
            {
            case DbWhereType.Default:
            {
                return(new DbQueryBuilder("1=1", null));
            }

            case DbWhereType.Equal:
            {
                if (_value == null)
                {
                    return(new DbQueryBuilder(string.Concat(GetName(ds), " IS NULL"), null));
                }
                DataParameter p = GetParameter(ds);
                return(new DbQueryBuilder(string.Concat(GetName(ds), '=', p.GetParameterName()), p));
            }

            case DbWhereType.NotEqual:
            {
                if (_value == null)
                {
                    return(new DbQueryBuilder(string.Concat("NOT ", GetName(ds), " IS NULL"), null));
                }
                DataParameter p = GetParameter(ds);
                return(new DbQueryBuilder(string.Concat(GetName(ds), "<>", p.GetParameterName()), p));
            }

            case DbWhereType.GreaterThan:
            {
                if (_value == null)
                {
                    throw new ArgumentNullException();
                }
                DataParameter p = GetParameter(ds);
                return(new DbQueryBuilder(string.Concat(GetName(ds), '>', p.GetParameterName()), p));
            }

            case DbWhereType.GreaterThanOrEqual:
            {
                if (_value == null)
                {
                    throw new ArgumentNullException();
                }
                DataParameter p = GetParameter(ds);
                return(new DbQueryBuilder(string.Concat(GetName(ds), ">=", p.GetParameterName()), p));
            }

            case DbWhereType.LessThan:
            {
                if (_value == null)
                {
                    throw new ArgumentNullException();
                }
                DataParameter p = GetParameter(ds);
                return(new DbQueryBuilder(string.Concat(GetName(ds), '<', p.GetParameterName()), p));
            }

            case DbWhereType.LessThanOrEqual:
            {
                if (_value == null)
                {
                    throw new ArgumentNullException();
                }
                DataParameter p = GetParameter(ds);
                return(new DbQueryBuilder(string.Concat(GetName(ds), "<=", p.GetParameterName()), p));
            }

            case DbWhereType.Like:
            {
                if (_value == null)
                {
                    throw new ArgumentNullException();
                }
                DataParameter p = GetParameter(ds, string.Concat('%', Convert.ToString(_value), '%'));
                return(new DbQueryBuilder(string.Concat(GetName(ds), " LIKE ", p.GetParameterName()), p));
            }

            case DbWhereType.LikeBegin:
            {
                if (_value == null)
                {
                    throw new ArgumentNullException();
                }
                DataParameter p = GetParameter(ds, string.Concat(Convert.ToString(_value), '%'));
                return(new DbQueryBuilder(string.Concat(GetName(ds), " LIKE ", p.GetParameterName()), p));
            }

            case DbWhereType.LikeEnd:
            {
                if (_value == null)
                {
                    throw new ArgumentNullException();
                }
                DataParameter p = GetParameter(ds, string.Concat('%', Convert.ToString(_value)));
                return(new DbQueryBuilder(string.Concat(GetName(ds), " LIKE ", p.GetParameterName()), p));
            }

            case DbWhereType.In:
            {
                if (_value == null)
                {
                    throw new ArgumentNullException();
                }
                IEnumerable e = _value as IEnumerable;
                if (e != null)
                {
                    DataParameter        p;
                    List <string>        vs    = new List <string>();
                    List <DataParameter> ps    = new List <DataParameter>();
                    IEnumerator          array = e.GetEnumerator();
                    while (array.MoveNext())
                    {
                        p = GetParameter(ds, array.Current);
                        vs.Add(p.GetParameterName());
                        ps.Add(p);
                    }
                    return(new DbQueryBuilder(string.Concat(GetName(ds), " IN (", string.Join(",", vs.ToArray()), ')'), ps.ToArray()));
                }
                IDbSubQuery <DbWhere> q = _value as IDbSubQuery <DbWhere>;
                if (q != null)
                {
                    DbQueryBuilder builder = q.Build(ds, 0, false);
                    return(new DbQueryBuilder(string.Concat(GetName(ds), " IN (", builder.Sql, ')'), builder.Parameters));
                }
                throw new NotSupportedException();
            }
            }
            throw new NotSupportedException();
        }