/// <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()); } } }
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); }