none
Zwei SQL-Ausgaben in der PowerShell hintereinander? RRS feed

  • Frage

  • Hallo,

    folgendes Skript für denZugriff auf einen MSSQL-Server:

    $SQLServer = "servername\instanz"
    $SQLDBName = "dbname"
    $SqlQuery1 = "SELECT UserName, UserLoginName, UserEmail FROM tabelle1" 
    $SqlQuery2 = "SELECT ResourceName FROM tabelle2 WHERE Deleted = 0" 
    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; Integrated Security = True" 
    function all1()
    {
      $SqlCmd1 = New-Object System.Data.SqlClient.SqlCommand
      $SqlCmd1.CommandText = $SqlQuery1
      $SqlCmd1.Connection = $SqlConnection
      $SqlAdapter1 = New-Object System.Data.SqlClient.SqlDataAdapter
      $SqlAdapter1.SelectCommand = $SqlCmd1 
      $DataSet1 = New-Object System.Data.DataSet
      $SqlAdapter1.Fill($DataSet1) 
      $SqlConnection.Close() 
      $DataSet1.Tables[0]
    }
    function all2()
    {
      $SqlCmd2 = New-Object System.Data.SqlClient.SqlCommand
      $SqlCmd2.CommandText = $SqlQuery2
      $SqlCmd2.Connection = $SqlConnection
      $SqlAdapter2 = New-Object System.Data.SqlClient.SqlDataAdapter
      $SqlAdapter2.SelectCommand = $SqlCmd2 
      $DataSet2 = New-Object System.Data.DataSet
      $SqlAdapter2.Fill($DataSet2) 
      $SqlConnection.Close()
      $DataSet2.Tables[0]
    }
    clear
    all1
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    clear
    all2
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

    Führe ich nur die Funktion all1 aus, läuft alles wie gewollt.

    Führe ich nur die Funktion all2 aus, läuft auch alles wie gewollt.

    Wenn ich allerdings, wie im Skript, die beiden Funktionen hintereinander

    ausführe, so bekomme ich bei der zweiten Funktion keine Ausgabe mehr.

    Woran könnte das liegen? Muss ich mich neu zum Server connecten

    oder die Verbindung zurücksetzen oder vorhandene Objekte löschen

    oder.....???

    Danke

    Dirk

    Dienstag, 16. April 2013 09:27

Antworten

  • Du machst die $SqlConnection in jeder Funktion zu.

     $SqlConnection.Close() muss in deinem Anwendungsfall aus den Funktionen raus

    Viele Grüße

    Philipp

    Dienstag, 16. April 2013 11:21
  • das sind nur Formatierungsprobleme, gib die DataTables einfach an Format-Table weiter:

    bei all1:
    $DataSet1.Tables[0] | ft
    
    bei all2:
    $DataSet2.Tables[0] | ft

    noch schöner wäre "fl"
    Dein Funktionsaufbau ist etwas komisch, da eine Weiterverarbeitung so nicht mehr möglich ist...

    lg speedy

    Mittwoch, 17. April 2013 08:50

Alle Antworten

  • Du machst die $SqlConnection in jeder Funktion zu.

     $SqlConnection.Close() muss in deinem Anwendungsfall aus den Funktionen raus

    Viele Grüße

    Philipp

    Dienstag, 16. April 2013 11:21
  • Hallöle,
    vielen Dank für die Antwort.
    Leider brachte das nicht das gewünschte Ergebnis.

    Ich habe nun mal komplett auf Funktionen verzichtet und
    verbinde mich zweimal (also mit Öffnen und Schließen) zum
    Datenbankserver.

    Aber auch dann...die zweite Ausgabe bleibt leer.

    Könnte es an der Anzahl der Spalten liegen?
    In der ersten Abfrage bekomme ich drei Spalten und in der
    zweiten nur eine Spalte. Gibt es dadurch vielleicht Darstellungs-
    probleme.

    Hier noch kurz der Code:

    # Erste Abfrage
    $SQLServer1 = "servername\instanz"
    $SQLDBName1 = "dbname"
    $SqlQuery1 = "SELECT UserName, UserLoginName, UserEmail FROM tabelle1" 
    $SqlConnection1 = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection1.ConnectionString = "Server = $SQLServer1; Database = $SQLDBName1; Integrated Security = True" 
    $SqlCmd1 = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd1.CommandText = $SqlQuery1
    $SqlCmd1.Connection = $SqlConnection1
    $SqlAdapter1 = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter1.SelectCommand = $SqlCmd1 
    $DataSet1 = New-Object System.Data.DataSet
    $SqlAdapter1.Fill($DataSet1) 
    $DataSet1.Tables[0]
    $SqlConnection1.Close()
    
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
    
    # Zweite Abfrage
    $SQLServer2 = "servername\instanz"
    $SQLDBName2 = "dbname"
    $SqlQuery2 = "SELECT ResourceName FROM tabelle2 WHERE Deleted = 0" 
    $SqlConnection2 = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection2.ConnectionString = "Server = $SQLServer2; Database = $SQLDBName2; Integrated Security = True" 
    $SqlCmd2 = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd2.CommandText = $SqlQuery2
    $SqlCmd2.Connection = $SqlConnection2
    $SqlAdapter2 = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter2.SelectCommand = $SqlCmd2
    $DataSet2 = New-Object System.Data.DataSet
    $SqlAdapter2.Fill($DataSet2) 
    $DataSet2.Tables[0]
    $SqlConnection2.Close()

    Danke
    Dirk


    • Bearbeitet Dirk D Dienstag, 16. April 2013 12:11 Rechtschreibung
    Dienstag, 16. April 2013 12:11
  • Hallo Dirk,

    Ich bin deinen Code durchgegangen und kann leider nichts sehen was daran falsch sein könnte.

    Du verwendest  zwei unabhängige Abfragen.

    Was sagt der Debugger wenn du zeilenweise durch gehst?

    Viele Grüße

    Philipp

    Meine Antwort war hilfreich? dann freue ich mich über eine Bewertung. If my answer was helpful, I'm glad about a rating!

    Dienstag, 16. April 2013 21:43
  • das sind nur Formatierungsprobleme, gib die DataTables einfach an Format-Table weiter:

    bei all1:
    $DataSet1.Tables[0] | ft
    
    bei all2:
    $DataSet2.Tables[0] | ft

    noch schöner wäre "fl"
    Dein Funktionsaufbau ist etwas komisch, da eine Weiterverarbeitung so nicht mehr möglich ist...

    lg speedy

    Mittwoch, 17. April 2013 08:50
  • Moinsen,

    der Debugger sagt rein garnichts.

    Aber der Hinweis mit der Formatierung war gut.
    Es lag in der Tat nur daran.

    Im Prinzip will ich mir nur die Inhalte der Tabellen
    anzeigen lassen. Eine weitere Verarbeitung ist
    bisher nicht vorgesehen.

    Aber mal sehen, was da noch auf mich zukommt. ;-)

    Danke und Gruß
    Dirk

    Montag, 22. April 2013 08:23