Загрузка данных


Удаляем Temp, если она осталась от предыдущего запуска
try { $cmd = $Connection.CreateCommand() $cmd.CommandText = "DROP TABLE [Temp]" $cmd.ExecuteNonQuery() | Out-Null $cmd.Dispose() } catch { }
Создаём список колонок для Temp
$Columns = @()
foreach ($Column in $FilterTable.Columns) {
$ColumnName = $Column.ColumnName

# Purchasing Document и Item оставляем с теми же именами,
# остальные колонки также создаём автоматически

$Columns += "[$ColumnName] TEXT(255)"
}
$cmd = $Connection.CreateCommand()
$cmd.CommandText = @" CREATE TABLE [Temp] ( $($Columns -join ",`n    ") ) "@
$cmd.ExecuteNonQuery() | Out-Null $cmd.Dispose()
Формируем INSERT
$ColumnNames = ( $FilterTable.Columns | ForEach-Object { "[(_.ColumnName)]" } ) -join ", "
$ParameterMarks = ( $FilterTable.Columns | ForEach-Object { "?" } ) -join ", "
Загружаем данные в Temp
foreach ($__row in $FilterTable.Rows) {
$cmd = $Connection.CreateCommand()

$cmd.CommandText = @"
INSERT INTO [Temp] ( $ColumnNames ) VALUES ( $ParameterMarks ) "@
foreach ($Column in $FilterTable.Columns) {

    $Parameter = $cmd.Parameters.Add(
        "@p",
        [System.Data.OleDb.OleDbType]::VarWChar,
        255
    )

    $Value = $__row[$Column.ColumnName]

    if ($Value -eq $null -or
        $Value -eq [System.DBNull]::Value) {

        $Parameter.Value = [System.DBNull]::Value
    }
    else {

        $Parameter.Value = [string]$Value
    }
}

$cmd.ExecuteNonQuery() | Out-Null
$cmd.Dispose()