예제 #1
0
        /// <summary>
        /// Bulks the insert.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="listPoco">The list poco.</param>
        /// <param name="tableName">Name of the table.</param>
        /// <returns>System.Int32.</returns>
        private static int BulkInsertSqlServer <T>(IDataSourceDb database, IEnumerable <T> listPoco, string tableName) where T : class
        {
            using (var bcp = new SqlBulkCopy(database.BuildConnectionString()))
            {
                var openTime = DateTime.Now;
                var bucket   = new QueryBucket()
                {
                    Query        = $"Bulk Insert On List Of Type {typeof(T).Name} Into Table {tableName}",
                    Server       = database.Server,
                    DatabaseType = database.DBTYPE.ToString()
                };
                bcp.SqlRowsCopied += delegate(object sender, SqlRowsCopiedEventArgs args)
                {
                    bucket.ConnectionDisposeTime = DateTime.Now;
                };
                database.QueryBucketManager.AddBucket(bucket);



                var array = new List <string>()
                {
                };
                var advances = ExtFastMember.GetAdvanceMembers(listPoco.FirstOrDefault()).Where(m => m.SqlCustomAttritube.AutoIncrementBy == null && m.SqlCustomAttritube.StartIncrementAt == null && m.SqlCustomAttritube.Ignore != true).ToList(); // EXECLUDES IDENTITY FEILDS
                advances.ForEach(delegate(AdvanceMember member)
                {
                    var columnName = member.SqlCustomAttritube.MapTo ?? member.Member.Name;
                    array.Add(columnName);
                });
                using (var reader = ObjectReader.Create(listPoco, array.ToArray()))
                {
                    bcp.DestinationTableName = tableName;
                    bcp.BulkCopyTimeout      = database.Timeout.TotalSeconds.ToInt(false);
                    bcp.WriteToServer(reader);
                    return(listPoco.Count());
                }
            }
        }
예제 #2
0
        public static QueryBucket LogConnectionTime(IDataSourceDb database, IDbConnection connection, string query)
        {
            var openTime = DateTime.Now;

            if (connection.State == ConnectionState.Open)
            {
                database.LastConnectionOpenTime = openTime;
            }
            var bucket = new QueryBucket()
            {
                ConnectionStartTime = openTime, Query = query, Server = database.Server, DatabaseType = DataBaseType.SqlServer.ToString()
            };

            switch (database.DBTYPE)
            {
            case DataBaseType.SqlServer:
                if (connection is SqlConnection c)
                {
                    c.Disposed += delegate(object sender, EventArgs args)
                    {
                        bucket.ConnectionDisposeTime = DateTime.Now;
                    };
                }
                break;

            case DataBaseType.MySql:
            case DataBaseType.Sqlite:

                bucket.ConnectionDisposeTime = null;


                break;

            case DataBaseType.Oracle:
                break;

            case DataBaseType.Oledb:
            case DataBaseType.Access95:
#if NETFRAMEWORK
                if (connection is OleDbConnection oledb)
                {
                    oledb.Disposed += delegate(object sender, EventArgs args)
                    {
                        bucket.ConnectionDisposeTime = DateTime.Now;
                    };
                }
                break;
#else
                throw new NotImplementedException($@".Net Standard haven't implemented this functionality yet.");
#endif

            case DataBaseType.Odbc:
#if NETFRAMEWORK
                if (connection is OdbcConnection odbc)
                {
                    odbc.Disposed += delegate(object sender, EventArgs args)
                    {
                        bucket.ConnectionDisposeTime = DateTime.Now;
                    };
                }
                break;
#else
                break;
#endif

            default:
                throw new ArgumentOutOfRangeException();
            }

            database.QueryBucketManager.AddBucket(bucket);
            return(bucket);
        }