// Create the SqlBulkCopy object. // Note that the column positions in the source DataTable // match the column positions in the destination table so // there is no need to map columns. using (SqlBulkCopy bulkCopy = new SqlBulkCopy(Conn)) { bulkCopy.DestinationTableName = "dbo.TempScan";

I haven't gone through your lengthy explanation but based on your subject line I can suggest that there might be some null values or empty values coming from source. In bulk insert, the preceding column will take this Null/empty value and might miss one column overall. Please check the source data, this might help as I encountered similar issue some time ago