2013-10-15 2 views
0

После asp.net код извлекает данные из CSV-файла и вставляет его в таблицу SQL Server 2005.Экспорт данных в SQL Server 2005 из файла CSV

Однако мне нужно указать имя таблицы, имена полей, данные которых будут извлечены, а также информацию о сопоставлении (сопоставление между именами столбцов CSV и имена столбцов таблицы) статически в коде.

Как изменить код ниже, чтобы он работал для любого имени таблицы.
Короче говоря, имя таблицы и картографирование должно обрабатываться динамически.

public class CsvBulkCopyDataIntoSqlServer 
{ 

    protected const string _truncateLiveTableCommandText = @"TRUNCATE TABLE Account"; 
    protected const int _batchSize = 100000; 

    static void Main(string[] args) 
    { 
     LoadCsvDataIntoSqlServer(); 

    } 

    public static void LoadCsvDataIntoSqlServer() 
    { 
     // This should be the full path 
     var fileName = @"D:\output.csv"; 
     var createdCount = 0; 

     using (var textFieldParser = new TextFieldParser(fileName)) 
     { 
      textFieldParser.TextFieldType = FieldType.Delimited; 
      textFieldParser.Delimiters = new[] { "," }; 
      textFieldParser.HasFieldsEnclosedInQuotes = true; 

      // var connectionString = ConfigurationManager.ConnectionStrings["CMSConnectionString"].ConnectionString; 
      string connectionString = "Data Source= 172.25.10.4" + ";Initial Catalog= SFdata" + ";Persist Security Info=True;User ID= sa" + ";Password= [email protected]"; 


      var dataTable = new DataTable("Account"); 


      // Add the columns in the temp table 
      dataTable.Columns.Add("Name"); 
      dataTable.Columns.Add("shippingstreet"); 
      dataTable.Columns.Add("shippingpostalcode"); 
      dataTable.Columns.Add("ShippingCountry"); 
      dataTable.Columns.Add("shippingstate"); 

      //dataTable.Columns.Add("LastName"); 

      using (var sqlConnection = new SqlConnection(connectionString)) 
      { 
       sqlConnection.Open(); 

       // Truncate the live table 
       using (var sqlCommand = new SqlCommand(_truncateLiveTableCommandText, sqlConnection)) 
       { 
        sqlCommand.ExecuteNonQuery(); 
       } 

       // Create the bulk copy object 
       var sqlBulkCopy = new SqlBulkCopy(sqlConnection) 
       { 
        DestinationTableName = "Account" 
       }; 

       // Setup the column mappings, anything ommitted is skipped 
       sqlBulkCopy.ColumnMappings.Add("Name", "Name"); 
       sqlBulkCopy.ColumnMappings.Add("shippingstreet", "shippingstreet"); 
       sqlBulkCopy.ColumnMappings.Add("shippingpostalcode", "shippingpostalcode"); 
       sqlBulkCopy.ColumnMappings.Add("ShippingCountry", "ShippingCountry"); 
       sqlBulkCopy.ColumnMappings.Add("shippingstate", "shippingstate"); 

       // Loop through the CSV and load each set of 100,000 records into a DataTable 
       // Then send it to the LiveTable 
       while (!textFieldParser.EndOfData) 
       { 
        dataTable.Rows.Add(textFieldParser.ReadFields()); 

        createdCount++; 

        if (createdCount % _batchSize == 0) 
        { 
         InsertDataTable(sqlBulkCopy, sqlConnection, dataTable); 

         break; 
        } 
       } 

       InsertDataTable(sqlBulkCopy, sqlConnection, dataTable); 

       sqlConnection.Close(); 
      } 
     } 
    } 

    protected static void InsertDataTable(SqlBulkCopy sqlBulkCopy, SqlConnection sqlConnection, DataTable dataTable) 
    { 
     sqlBulkCopy.WriteToServer(dataTable); 

     dataTable.Rows.Clear(); 
    } 

} 

ответ

0

Почему вы не использовать SQL Integration Services сервера, это сделает вашу жизнь проще

+0

SQL Server Integration Services имеет множество UI экранов, на которых пользователь должен сделать выбор. Принимая во внимание, что вся моя передача данных должна выполняться в фоновом режиме, поэтому, пожалуйста, помогите мне, изменив приведенный выше код. – Peace

Смежные вопросы