2016-07-25 1 views
0

Je suis nouveau sur PowerShell. S'il vous plaît aidez-moi sur la façon d'obtenir ce qui suit: afficher des données sur SQL Server de chaque ligne à partir d'un fichier xls en utilisant PowerShell. Ci-dessous le code que j'ai créé jusqu'à maintenant mais qui s'avère qu'une seule ligne de données est affichée dans la base de données. Comment est-ce que je boucle la sortie de chaque rangée?Afficher les données sur SQL Server de chaque ligne à partir d'un fichier xls à l'aide de powershell

$filepath = "C:\Source\AandPrates.xls" 

#object to open excel workbook 
$excel= New-Object -ComObject Excel.Application 
$workbook = $excel.Workbooks.Open($filepath) 
$worksheet = $workbook.Worksheets.Item(1) 
$startRow = 4 

#create system.datatable 
#read xls file line by line and display on powershell 
$dt = New-Object "System.Data.DataTable" 
[void]$dt.Columns.Add("Currency Name", 
    [System.Type]::GetType("System.String")) 
[void]$dt.Columns.Add("ISO Code", 
    [System.Type]::GetType("System.String")) 
[void]$dt.Columns.Add("Accounting Rates", 
    [System.Type]::GetType("System.String")) 
[void]$dt.Columns.Add("Base Currency", 
    [System.Type]::GetType("System.String")) 
Do { 
    $ColValues1 = $worksheet.Cells.Item($startRow,1).Value() 
    $ColValues2 = $worksheet.Cells.Item($startRow,2).Value() 
    $ColValues3 = $worksheet.Cells.Item($startRow,3).Value() 
    $ColValues4 = $worksheet.Cells.Item($startRow,4).Value() 
    $startRow++ 
    $dt.Rows.Add($ColValues1,$ColValues2,$ColValues3,$ColValues4) 
    } 
    while ($worksheet.Cells.Item($startRow,1).Value() -ne $null) 

$name = $ColValues1 
$code = $ColValues2 
$rates = $ColValues3 
$currency = $ColValues4 

$Excel.Quit() 

#Connect to the SQL database 
$Conn = New-Object System.Data.SqlClient.SqlConnection 
$Conn.ConnectionString = "Server=5CG61730W6\SQLEXPRESS;Database=shamsuli;trusted_connection=true;" 
$Conn.Open() 
$Command = New-Object System.Data.SQLClient.SQLCommand 
$Command.Connection = $Conn 

#insert the output from powershell into sql server 
$output | foreach { 
$Command.CommandText = "INSERT INTO dbo.MyTable (Name,Code,Rates,Currency) VALUES (@Name, @Code, @Rates, @Currency)" 
$Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Name", $name))); 
$Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Code", $code))); 
$Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Rates", $rates))); 
$Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Currency", $currency))); 
$Command.ExecuteNonQuery() | out-null 
} 

$Conn.Close() 

Répondre

0

J'ai déjà la réponse à ma question. Merci d'avance. :)

$filepath = "C:\Source\AandPrates.xls" 

#object to open excel workbook 
$excel= New-Object -ComObject Excel.Application 
$workbook = $excel.Workbooks.Open($filepath) 
$worksheet = $workbook.Worksheets.Item(1) 
$startRow = 2 

#create system.datatable 
$dt = New-Object "System.Data.DataTable" 
[void]$dt.Columns.Add("Currency Name", 
    [System.Type]::GetType("System.String")) 
[void]$dt.Columns.Add("ISO Code", 
    [System.Type]::GetType("System.String")) 
[void]$dt.Columns.Add("Accounting Rates", 
    [System.Type]::GetType("System.String")) 
[void]$dt.Columns.Add("Base Currency", 
    [System.Type]::GetType("System.String")) 

Do { 
    $name = $ColValues1 
    $code = $ColValues2 
    $rates = $ColValues3 
    $currency = $ColValues4 
    $ColValues1 = $worksheet.Cells.Item($startRow,1).Value() 
    $ColValues2 = $worksheet.Cells.Item($startRow,2).Value() 
    $ColValues3 = $worksheet.Cells.Item($startRow,3).Value() 
    $ColValues4 = $worksheet.Cells.Item($startRow,4).Value() 
    $startRow++ 
    $dt.Rows.Add($ColValues1,$ColValues2,$ColValues3,$ColValues4) 

    #Connect to the SQL database 
    $Conn = New-Object System.Data.SqlClient.SqlConnection 
    $Conn.ConnectionString = "Server=5CG61730W6\SQLEXPRESS;Database=shamsuli;trusted_connection=true;" 
    $Conn.Open() 
    $Command = New-Object System.Data.SQLClient.SQLCommand 
    $Command.Connection = $Conn 


    foreach ($worksheet in $excel) { 

    $Command.CommandText = "INSERT INTO dbo.MyTable1000 (Name,Code,Rates,Currency) VALUES (@Name, @Code, @Rates, @Currency)" 
    $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Name", $name))); 
    $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Code", $code))); 
    $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Rates", $rates))); 
    $Command.Parameters.Add((New-Object Data.SqlClient.SqlParameter("@Currency", $currency))); 
    $Command.ExecuteNonQuery(); 
    } 

    $Conn.Close() 

    } 
    while ($worksheet.Cells.Item($startRow,1).Value() -ne $null) 

$Excel.Quit()