Advertisement
cwprogram

CSV -> SQL Server Code

Jul 9th, 2011
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Function DatabaseHandler
  2. {
  3.     param($connection_string, $destination_table,$data_table,$timeout)
  4.     $bulkCopy = New-Object Data.SqlClient.SqlBulkCopy($connection_string)
  5.     $bulkCopy.DestinationTableName = $destination_table
  6.     $bulkCopy.BulkCopyTimeout = $timeout
  7.     $bulkCopy.WriteToServer($data_table)
  8. }
  9.  
  10. function MakeColumn($column_name,$data_type)
  11. {
  12.     $column = New-Object System.Data.DataColumn
  13.     $column.DataType = [System.Type]::GetType($data_type);
  14.     $column.ColumnName = $column_name;
  15.  
  16.     return $column
  17. }
  18.  
  19. function IntializeDataTable
  20. {
  21.     param($data_table,$column_data)
  22.    
  23.     foreach($column_specifier in $column_data)
  24.     {
  25.         $data_table.Columns.Add(
  26.             (MakeColumn $column_specifier.name $column_specifier.data_type))
  27.     }
  28. }
  29.  
  30. Function CsvHandler
  31. {
  32.     param($data_table,$column_data)
  33.     begin {
  34.         Write-Host "Processing Started:" (Get-Date)
  35.         $progress = 0
  36.         $chunksize = 10000
  37.     }
  38.     process {
  39.        
  40.         $row = $data_table.NewRow()
  41.         foreach($column_specifier in $column_data)
  42.         {
  43.             $name = $column_specifier.name
  44.             if( $column_specifier.ContainsKey("function") -and ( IsScriptBlock $column_specifier.function ) )
  45.             {
  46.                 $column_value = & $column_specifier.function $name $_
  47.             }
  48.             elseif ( $column_specifier.ContainsKey("fixed_value") )
  49.             {
  50.                 $column_value = $column_specifier.fixed_value
  51.             }
  52.             else
  53.             {
  54.                 $column_value = $_.$name
  55.             }
  56.            
  57.             $row[$name] = $column_value
  58.         }
  59.        
  60.         $data_table.Rows.Add($row)
  61.        
  62.         $progress++
  63.         if($progress % $chunksize -eq 0)
  64.         {
  65.             Write-Host $chunksize "records processed"
  66.         }
  67.     }
  68.     end {
  69.         Write-Host "Processing Ended:" (Get-Date)
  70.     }
  71. }
  72.  
  73. Function PopulateDatabaseFromCsv
  74. {
  75.     param($csv,$column_data,$connection_string,$destination_table,$timeout=30)
  76.    
  77.     $data_table = New-Object System.Data.DataTable($destination_table)
  78.     IntializeDataTable $data_table $column_data
  79.     Import-Csv $csv | CsvHandler $data_table $column_data
  80.     DatabaseHandler $connection_string $destination_table $data_table $timeout
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement