Exemplo n.º 1
0
        /// <summary>
        /// Save datatable into a table on the database
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sourceDataTable"></param>
        /// <param name="destinationTableName">Name of the database table you want to bulk insert this data. If destinationTableName isn't supplied, it will use name of T as Table name.</param>
        /// <param name="sqlBulkCopyOptions">Bitwise flag that specifies one or more options to use with an instance of SqlBulkCopy</param>
        /// <returns></returns>
        public async Task Save <T>(DataTable sourceDataTable, string destinationTableName = null, SqlBulkCopyOptions sqlBulkCopyOptions = SqlBulkCopyOptions.Default)
        {
            using SqlConnection connection = _dbConnectionFactory.CreateConnection() as SqlConnection;
            await connection.OpenAsync();

            using SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection, sqlBulkCopyOptions, null)
                  {
                      BatchSize            = this.BatchSize,
                      BulkCopyTimeout      = this.BulkCopyTimeout,
                      DestinationTableName = destinationTableName ?? sourceDataTable.TableName ?? typeof(T).Name,
                  };

            sourceDataTable.AddColumnMappings(sqlBulkCopy);

            await sqlBulkCopy.WriteToServerAsync(sourceDataTable);
        }