2017-02-07 2 views
3

Ich lerne Powershell-Skript zur Automatisierung einiger SQL-Aufgaben. Ich benutzte DataAdapter, um das Dataset zu füllen, und ich erhielt eine korrekte Zahl von der Konsole, die besagt, dass 14 Spalten ausgewählt sind. Ich verwende jedoch eine Schleife, um eine bestimmte Spalte einer Tabelle aus einem Dataset auszudrucken.Wie erhalte ich eine bestimmte Spalte einer Tabelle in einem Datensatz?

Update:

1) TheMadTechnician mein Problem behoben - Eine SQL-Abfrage Fehler.
2) Ich habe den korrigierten Code hier aktualisiert. Außerdem habe ich Methode3 hinzugefügt, um anderen zu helfen, eine besser formatierte Tabelle zu drucken.

Mein Code:

# $ConnectionString is the server and my account info. 
$SqlQuery = $("SELECT * FROM MyTable") 

$Connection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString) 
$SqlCommand = New-Object System.Data.SQLClient.SQLCommand($SqlQuery, $Connection) 
$Connection.Open() 

$DataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$DataAdapter.SelectCommand = $SqlCommand 
$Dataset = New-Object System.Data.Dataset 
$DataAdapter.Fill($Dataset) 

$Connection.Close() 

# Method1: 
foreach ($Row in $Dataset.Tables[0].Rows) {  
    Write-Host "col_1:$($Row.Id) col_2:$($Row.CreatedDateTime) col_3:$($Row.DeactivatedDateTime)" 
} 

# Method2: 
foreach ($Row in $Dataset.Tables[0].Rows) { 
    Write-Host "col_1:$($Row[0]) col_2:$($Row[1]) col_3:$($Row[2])" 
} 

# Method3: 
for ($i = 0; $i -lt $Dataset.Tables.Count; $i++) { 
    $Dataset.Tables[$i] | format-table | out-host 
} 
+0

Können Sie den Code, wie Sie den DA füllen? Ich nehme an, Sie füllen den DA einmal und führen Sie die drei Methoden auf dem gleichen $ Dataset –

+0

, wenn Sie nur versuchen, Daten zu drucken, warum nicht 'invoke-sqlcmd' PowerShell-Cmdlet verwenden und ein PowerShell-Objekt zurückgegeben. Es ist viel einfacher mit zu arbeiten. Zum Beispiel '$ data = invoke-sqlcmd -serverinstanz 'server \ instance' -database 'db' -query 'meine select oder exec-Anweisung'; $ Daten | select-object -property spaltenname, spaltenname2 ## andere daten acess-methode könnte sein $ data.ColumnName' Sie könnten auch das '$ data'-Objekt in eine Schleife einfügen und auf die Spalten auf die gleiche Weise Datensatz für Datensatz zugreifen. Wenn Sie sich dafür als Lösung interessieren, werde ich eine Antwort mit einem vollständigen Beispiel veröffentlichen. – jkdba

+0

@JoeC, Code wird gepostet. –

Antwort

0

Ihre Anfrage an SELECT * FROM MyTable ändern und es sollte funktionieren. Im Moment wird nur CreatedDateTime angezeigt, da dies das einzige ist, was Ihre Abfrage zurückgibt.

Verwandte Themen