public bool BulkInsertItemList <T>(string tableName, List <T> data, List <PropertyInfo> propList = null)
        {
            if (data == null || data.Count == 0)
            {
                return(true);
            }

            if (propList == null)
            {
                propList = TableClass.GetTableFieldProperties <T>();
            }

            SqlTransaction strans = transaction as SqlTransaction;
            SqlConnection  sconn  = conn as SqlConnection;

            SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sconn, SqlBulkCopyOptions.TableLock, strans);
            DataTable   dTable      = new DataTable();

            sqlBulkCopy.BatchSize            = data.Count();
            sqlBulkCopy.DestinationTableName = tableName;

            foreach (PropertyInfo prop in propList)
            {
                sqlBulkCopy.ColumnMappings.Add(prop.Name, prop.Name);
                dTable.Columns.Add(prop.Name, prop.PropertyType);
            }

            foreach (T d in data)
            {
                object[] values = new object[propList.Count];

                for (int i = 0; i < propList.Count; i++)
                {
                    PropertyInfo p = propList[i];
                    values[i] = p.GetValue(d);
                }

                dTable.Rows.Add(values);
            }

            sqlBulkCopy.WriteToServer(dTable);
            return(true);
        }