/// <summary>
 /// Bulk insert data reader async using connection string.
 /// </summary>
 /// <param name="dataReader"></param>
 /// <param name="destinationTableName"></param>
 /// <param name="connectionString"></param>
 /// <param name="sqlServerBulkInsertOptions"></param>
 /// <returns></returns>
 public static async Task BulkInsertSqlServerAsync(
     this IDataReader dataReader,
     string connectionString,
     string destinationTableName,
     AsyncSqlServerBulkInsertOptions sqlServerBulkInsertOptions)
 {
     using (var connection = new SqlConnection(connectionString))
     {
         connection.Open();
         await BulkInsertSqlServerAsync(dataReader, connection, destinationTableName, sqlServerBulkInsertOptions);
     }
 }
        /// <summary>
        /// Bulk insert data reader async.
        /// </summary>
        /// <param name="dataReader"></param>
        /// <param name="connection"></param>
        /// <param name="destinationTableName"></param>
        /// <param name="sqlServerBulkInsertOptions"></param>
        /// <returns></returns>
        public static async Task BulkInsertSqlServerAsync(this IDataReader dataReader, SqlConnection connection, string destinationTableName, AsyncSqlServerBulkInsertOptions sqlServerBulkInsertOptions = null)
        {
            sqlServerBulkInsertOptions = sqlServerBulkInsertOptions ?? new AsyncSqlServerBulkInsertOptions();
            var bulkCopy = GetSqlBulkCopy(dataReader, destinationTableName, connection, sqlServerBulkInsertOptions);

            using (bulkCopy)
            {
                try
                {
                    await bulkCopy.WriteToServerAsync(dataReader, sqlServerBulkInsertOptions.CancellationToken);
                }
                catch (SqlException ex)
                {
                    var errmsgbcp = "";
                    if (ex.Message.Contains("Received an invalid column length from the bcp client for colid"))
                    {
                        errmsgbcp += GetBulkCopyDetailedExceptionMessage(ex, bulkCopy);
                        throw new Exception(errmsgbcp, ex);
                    }
                    throw;
                }
            }
        }