コード例 #1
0
ファイル: ObjectEntity.cs プロジェクト: wushunming/UMC.NET
 public ObjectEntity(Sqler sqler, string tableName)
 {
     this.db        = sqler.DbProvider;
     this.cond      = new Conditions <T>(this);
     this.seq       = new Sequencer <T>(this);
     this.SqlHelper = new EntityHelper(this.db, typeof(T), tableName);
     this.sqler     = sqler;
 }
コード例 #2
0
ファイル: Sqler.cs プロジェクト: wushunming/UMC.NET
        List <T> ISqler.Execute <T>(string sqlText, params object[] paramers)
        {
            EntityHelper sqlHelper = new EntityHelper(this.dbProvider, typeof(T));
            var          list      = new List <T>();
            ISqler       sqler     = this;

            sqler.Execute <T>(sqlText, r => list.Add(r), paramers);
            return(list);
        }
コード例 #3
0
 void ExecuteNonQuery(CSV.Log log, ISqler sqler, string sb)
 {
     try
     {
         sqler.ExecuteNonQuery(sb.ToString());
     }
     catch (Exception ex)
     {
         log.Error(ex.Message);
     }
 }
コード例 #4
0
ファイル: Grouper.cs プロジェクト: wushunming/UMC.Data
        System.Data.DataTable IGrouper <T> .Query()
        {
            var sb   = new StringBuilder();
            var agrs = this.Format(sb);

            this.seq.FormatSqlText(sb);

            ISqler sqer = this.sqler;

            this.script = Script.Create(sb.ToString(), agrs);
            return(sqer.ExecuteTable(this.script.Text, this.script.Arguments));
        }
コード例 #5
0
ファイル: Grouper.cs プロジェクト: wushunming/UMC.Data
        void IGrouper <T> .Query(DataReader <T> reader)
        {
            var sb   = new StringBuilder();
            var agrs = this.Format(sb);

            this.seq.FormatSqlText(sb);

            ISqler sqer = this.sqler;

            this.script = Script.Create(sb.ToString(), agrs);
            sqer.Execute <T>(this.script.Text, reader, this.script.Arguments);
        }
コード例 #6
0
ファイル: Grouper.cs プロジェクト: wushunming/UMC.Data
        T IGrouper <T> .Single()
        {
            var sb   = new StringBuilder();
            var agrs = this.Format(sb);

            this.seq.FormatSqlText(sb);

            ISqler sqer = this.sqler;

            this.script = Script.Create(sb.ToString(), agrs);
            return(sqer.ExecuteSingle <T>(this.script.Text, this.script.Arguments));
        }
コード例 #7
0
        public override bool?Check(string name, string field, ISqler sqler)
        {
            var bc = false;

            sqler.Execute(System.String.Format("PRAGMA  table_info([{0}])", name), dr =>
            {
                while (dr.Read())
                {
                    bc = System.String.Equals(dr["name"] as string, field, StringComparison.CurrentCultureIgnoreCase);
                    if (bc)
                    {
                        return;
                    }
                }
            });
            return(bc);
        }
コード例 #8
0
ファイル: Sqler.cs プロジェクト: wushunming/UMC.NET
        //int[] ISqler.ExecuteNonQuery(System.Predicate<int> predicate, System.Action<Script> action)
        //{

        //    var list = new List<int>();
        //    this.Command(cmd =>
        //    {
        //        this.script = Script.Create(String.Empty, new object[0]);

        //        var count = -1;
        //        while (predicate(count))
        //        {
        //            action(this.script);

        //            if (String.IsNullOrEmpty(this.script.Text))
        //            {
        //                break;
        //            }
        //            else
        //            {
        //                cmd.Parameters.Clear();
        //                cmd.CommandText = SqlParamer.Format(this.dbProvider, this.isAutoPfx, cmd, this.script.Text, this.script.Arguments);
        //                count = cmd.ExecuteNonQuery();
        //                list.Add(count);
        //                this.script.Reset(String.Empty);
        //            }

        //        }
        //        return 0;

        //    });
        //    return list.ToArray();

        //}

        #endregion

        #region ISqler Members


        int[] ISqler.ExecuteNonQuery(params Script[] scripts)
        {
            var    l    = -1;
            ISqler d    = this;
            var    list = new List <int>();


            d.Execute(sc =>
            {
                if (l < scripts.Length)
                {
                    sc.Reset(scripts[l].Text, scripts[l].Arguments);
                    return(true);
                }
                return(false);
            }, cmd => list.Add(cmd.ExecuteNonQuery()));
            return(list.ToArray());
        }
コード例 #9
0
ファイル: Inserter.cs プロジェクト: wushunming/UMC.NET
 public Inserter(Sqler sqler)
 {
     this.dbProvider = sqler.DbProvider;
     this.sqler      = sqler;
 }
コード例 #10
0
        void CreateTable(ISqler sqler, DbProvider provider, CSV.Log log, Object key, object value)
        {
            var tabName = key.GetType().Name;

            log.Info("创建表", tabName);

            var keys = CBO.GetProperty(key);
            IDictionary <string, object> textKeys = new Dictionary <string, object>();

            if (value != null)
            {
                if (value.GetType().IsArray == false)
                {
                    textKeys = CBO.GetProperty(value);
                }
            }
            var Delimiter = provider.Delimiter;
            //var provider = sqler.DbProvider;
            var builder = provider.Builder;

            if (String.IsNullOrEmpty(Delimiter))
            {
                tabName = String.Format("{0}{3}{2}", provider.QuotePrefix, provider.Prefixion, provider.QuoteSuffix, tabName);
            }
            else
            {
                if (String.IsNullOrEmpty(provider.Prefixion))
                {
                    tabName = String.Format("{0}{1}{2}", provider.QuotePrefix, tabName, provider.QuoteSuffix);
                }
                else
                {
                    switch (Delimiter)
                    {
                    case ".":
                        tabName = String.Format("{0}{1}{2}.{0}{3}{2}", provider.QuotePrefix, provider.Prefixion, provider.QuoteSuffix, tabName);
                        break;

                    default:
                        tabName = String.Format("{0}{1}{4}{3}{2}", provider.QuotePrefix, provider.Prefixion, provider.QuoteSuffix, tabName, Delimiter);
                        break;
                    }
                }
            }
            var sb = new StringBuilder();

            sb.Append("CREATE TABLE ");
            sb.Append(tabName);
            sb.Append("(");
            var ps = key.GetType().GetProperties();

            foreach (var property in ps)
            {
                var filed = String.Format("{0}{2}{1} ", provider.QuotePrefix, provider.QuoteSuffix, property.Name);

                sb.Append(builder.Column(filed));
                var type = property.PropertyType;
                if (type.IsGenericType)
                {
                    type = type.GetGenericArguments()[0];
                }
                switch (type.FullName)
                {
                case "System.SByte":
                case "System.Byte":
                case "System.Int16":
                case "System.UInt16":
                case "System.Int32":
                case "System.UInt32":
                    sb.Append(builder.Integer());
                    break;

                case "System.Double":
                case "System.Single":
                    sb.Append(builder.Float());
                    break;

                case "System.Int64":
                case "System.UInt64":
                case "System.Decimal":
                    sb.Append(builder.Number());
                    break;

                case "System.Boolean":
                    sb.Append(builder.Boolean());
                    break;

                case "System.DateTime":
                    sb.Append(builder.Date());
                    break;

                case "System.Guid":
                    sb.Append(builder.Guid());
                    break;

                default:
                    if (property.PropertyType.IsEnum)
                    {
                        sb.Append(builder.Integer());
                    }
                    else
                    {
                        if (textKeys.ContainsKey(property.Name))
                        {
                            sb.Append(builder.Text());
                        }
                        else
                        {
                            sb.Append(builder.String());
                        }
                    }
                    break;
                }
                if (keys.ContainsKey(property.Name))
                {
                    sb.Append(" NOT NULL");
                }
                sb.Append(",");
            }
            if (value != null)
            {
                if (value.GetType().IsArray)
                {
                    var fs = (string[])value;
                    foreach (var f in fs)
                    {
                        var filed = String.Format("{0}{2}{1} ", provider.QuotePrefix, provider.QuoteSuffix, f);
                        sb.Append(builder.Column(filed));
                        sb.Append(builder.String());
                        sb.Append(",");
                    }
                }
            }
            sb.Remove(sb.Length - 1, 1);

            sb.Append(")");
            try
            {
                sqler.ExecuteNonQuery(sb.ToString());
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
            }
            if (keys.Count > 0)
            {
                var ids = new List <String>();
                var m   = keys.GetEnumerator();
                while (m.MoveNext())
                {
                    var filed = String.Format("{0}{1}{2}", provider.QuotePrefix, m.Current.Key, provider.QuoteSuffix);
                    ids.Add(filed);
                }
                var sql = builder.PrimaryKey(tabName, ids.ToArray());
                if (String.IsNullOrEmpty(sql) == false)
                {
                    try
                    {
                        sqler.ExecuteNonQuery(sql);
                    }
                    catch (Exception ex)
                    {
                        log.Error("创建主键" + String.Join(",", ids.ToArray()), ex.Message);
                    }
                }
            }
        }
コード例 #11
0
        void CheckTable(ISqler sqler, DbProvider provider, CSV.Log log, Object key, object value)
        {
            var tabName = key.GetType().Name;

            log.Info("检测表", tabName);

            var keys = CBO.GetProperty(key);
            IDictionary <string, object> textKeys = new Dictionary <string, object>();

            if (value != null)
            {
                if (value.GetType().IsArray == false)
                {
                    textKeys = CBO.GetProperty(value);
                }
            }
            var builder = provider.Builder;


            tabName = GetName(provider, tabName);
            if (builder.Check(tabName.Replace(provider.QuotePrefix, "").Replace(provider.QuoteSuffix, ""), sqler) == false)
            {
                CreateTable(sqler, provider, log, key, value);
            }
            else
            {
                var ps = key.GetType().GetProperties();
                foreach (var property in ps)
                {
                    var filed  = String.Format("{0}{2}{1} ", provider.QuotePrefix, provider.QuoteSuffix, property.Name);
                    var cfiled = builder.Column(filed);
                    if (builder.Check(tabName.Replace(provider.QuotePrefix, "").Replace(provider.QuoteSuffix, "").Trim(), cfiled.Replace(provider.QuotePrefix, "").Replace(provider.QuoteSuffix, "").Trim(), sqler) == false)
                    {
                        var sb   = new StringBuilder();
                        var type = property.PropertyType;
                        if (type.IsGenericType)
                        {
                            type = type.GetGenericArguments()[0];
                        }
                        switch (type.FullName)
                        {
                        case "System.SByte":
                        case "System.Byte":
                        case "System.Int16":
                        case "System.UInt16":
                        case "System.Int32":
                        case "System.UInt32":
                            sb.Append(builder.AddColumn(tabName, cfiled, builder.Integer()));
                            break;

                        case "System.Double":
                        case "System.Single":
                            sb.Append(builder.AddColumn(tabName, cfiled, builder.Float()));
                            break;

                        case "System.Int64":
                        case "System.UInt64":
                        case "System.Decimal":
                            sb.Append(builder.AddColumn(tabName, cfiled, builder.Number()));
                            break;

                        case "System.Boolean":
                            sb.Append(builder.AddColumn(tabName, cfiled, builder.Boolean()));
                            break;

                        case "System.DateTime":
                            sb.Append(builder.AddColumn(tabName, cfiled, builder.Date()));
                            break;

                        case "System.Guid":
                            sb.Append(builder.AddColumn(tabName, cfiled, builder.Guid()));
                            break;

                        default:
                            if (property.PropertyType.IsEnum)
                            {
                                sb.Append(builder.AddColumn(tabName, cfiled, builder.Integer()));
                            }
                            else
                            {
                                if (textKeys.ContainsKey(property.Name))
                                {
                                    sb.Append(builder.AddColumn(tabName, cfiled, builder.Text()));
                                }
                                else
                                {
                                    sb.Append(builder.AddColumn(tabName, cfiled, builder.String()));
                                }
                            }
                            break;
                        }
                        if (sb.Length > 0)
                        {
                            log.Info("追加表字段", tabName + '.' + cfiled);
                            ExecuteNonQuery(log, sqler, sb.ToString());
                        }
                    }
                }
                if (value != null)
                {
                    if (value.GetType().IsArray)
                    {
                        var fs = (string[])value;
                        foreach (var f in fs)
                        {
                            var filed = builder.Column(String.Format("{0}{2}{1} ", provider.QuotePrefix, provider.QuoteSuffix, f));
                            if (builder.Check(tabName.Replace(provider.QuotePrefix, "").Replace(provider.QuoteSuffix, "").Trim(), filed.Replace(provider.QuotePrefix, "").Replace(provider.QuoteSuffix, "").Trim(), sqler) == false)
                            {
                                log.Info("追加表字段", tabName + '.' + filed);
                                ExecuteNonQuery(log, sqler, builder.AddColumn(tabName, filed, builder.String()));
                            }
                        }
                    }
                }
            }
        }
コード例 #12
0
 public override bool?Check(string name, ISqler sqler)
 {
     return(Convert.ToInt32(sqler.ExecuteScalar("SELECT COUNT(*) FROM USER_OBJECTS WHERE TABLE_NAME = {0}", name)) > 0);
 }
コード例 #13
0
 public override bool?Check(string name, string field, ISqler sqler)
 {
     return(Convert.ToInt32(sqler.ExecuteScalar("SELECT COUNT(*) FROM USER_TAB_COLUMNS WHERE TABLE_NAME = {0} AND COLUMN_NAME = {1}", name, field)) > 0);
 }
コード例 #14
0
        public override bool?Check(string name, ISqler sqler)
        {
            int m = Convert.ToInt32(sqler.ExecuteScalar("select  count(*)  from sys.objects where object_id=object_id({0})", name));

            return(m > 0);
        }
コード例 #15
0
        public override bool?Check(string name, ISqler sqler)
        {
            int m = Convert.ToInt32(sqler.ExecuteScalar("select count(*) from information_schema.tables where table_name = {0}", name));

            return(m > 0);
        }
コード例 #16
0
        public override bool?Check(string name, string field, ISqler sqler)
        {
            int m = Convert.ToInt32(sqler.ExecuteScalar("select count(*) from information_schema.columns where table_name = {0} and column_name = {1}", name, field));

            return(m > 0);
        }
コード例 #17
0
ファイル: IDbBuilder.cs プロジェクト: wushunming/UMC.Data
 /// <summary>
 /// 检测表名
 /// </summary>
 /// <param name="name"></param>
 /// <param name="sqler"></param>
 /// <returns></returns>
 public virtual bool?Check(string name, ISqler sqler)
 {
     return(null);
 }
コード例 #18
0
        public override bool?Check(string name, string field, ISqler sqler)
        {
            int m = Convert.ToInt32(sqler.ExecuteScalar("select  count(*)  from sys.columns where object_id=object_id({0}) AND name={1}", name, field));

            return(m > 0);
        }
コード例 #19
0
        public override bool?Check(string name, ISqler sqler)
        {
            int m = Convert.ToInt32(sqler.ExecuteScalar("select count(*)  from sqlite_master where type ={1} and name = {0}", name, "table"));

            return(m > 0);
        }