Warum Powershell denke, ich bin versucht, ein Objekt zurückgeben, [] eher dann eine DataTable?

Habe ich Folgendes PS-Funktion:

function GetBuildData {
    [System.Data.SqlClient.SqlConnection] $conn = New-Object System.Data.SqlClient.SqlConnection
    [System.Data.SqlClient.SqlCommand] $cmd = New-Object System.Data.SqlClient.SqlCommand
    [System.Data.SqlClient.SqlDataAdapter] $adapter = New-Object System.Data.SqlClient.SqlDataAdapter
    [System.Data.DataTable] $dt = New-Object System.Data.DataTable

    try {
        [string] $connStr = "myConnectionString"

        $conn.ConnectionString = $connStr
        $cmd.Connection = $conn
        $cmd.CommandText = "SELECT * FROM TestTable"

        $conn.Open

        $adapter.SelectCommand = $cmd

        $adapter.Fill($dt)

        $conn.Close
    }
    catch [system.exception]
    {
        Write-Host $_
    }
    finally {
        $adapter.Dispose
        $cmd.Dispose
        $conn.Dispose
    }

    return $dt
}

Meisten die Funktion wurde aus Gründen der Kürze entfernt. Das problem ist, wenn ich rufen Sie die Funktion etwa so:

[System.Data.DataTable] $buildData = GetBuildData

Bekomme ich die folgende Fehlermeldung:

Nicht konvertieren kann das "System.Object[]" der Wert vom Typ "System.Object[]"
der Typ "System.Daten.DataTable".

Warum Powershell denken, dass ich wollte ein object [] - array zurückgegeben, wenn es offensichtlich ist, dass die $dt variable ist eine DataTable?

EDIT:

Habe ich doppelt überprüft, und $dt enthält Daten. Zum Beispiel, die Anzahl der Zeilen.Count ist 1, die erwartet wird.

  • welche Zeile wird der Fehler auf? die Fehlermeldung sollte die Linie und die Zahl. Ich gehe davon aus, dass es passiert hier: $adapter.Fill($dt) ??
  • Hast du schon versucht die , Betreiber wie vorgeschlagen in jpmc26 Antwort? Ich lief in dieses problem, und das war die Lösung.
  • Hat einer von den Antworten, die Ihr problem lösen? Wenn Nein, könntest du ein paar mehr Infos darüber, warum Sie nicht arbeiten?
  • Basierend auf dem feedback in die Kommentare, ich habe markiert Eure Antwort als korrekt. Entschuldigung für das verlassen dieser Frage aufgegeben. Ich war zufällig zu verschieben, auf andere Dinge und nie revisited dieses Problem.
InformationsquelleAutor Jason Evans | 2012-12-20
Schreibe einen Kommentar