invoke-sqlcmd in powershell

BelneaHP

Lt. Junior Grade
Registriert
Okt. 2007
Beiträge
439
Hey!

Ich versuche ein SQL-Statement über vb.net auszuführen. Dazu bediene ich mich der Powershell und dem command invoke-sqlcmd.
Klappt hervorragend, wenn man direkt in Powershell arbeitet. In vb.net kommt bei den gleichen Calls immer zu dem gleichen Problem "Es wurde kein Positionsparameter gefunden, der das Argument blabla akzeptiert."

Dann bin ich auf folgendes gestoßen, und hoffe ihr könnt mir sagen wie es dazu kommt:

Direkt in der Powershell klappt dies beides ohne Probleme:
get-date
und
powershell.exe get-date
Die Ausgabe unterscheidet sich nicht.

ABER

invoke-sqlcmd -Query "set nocount on;select configvalue from configuration where configkey = '1'" -ServerInstance "192.168.1.8" -Database 'Testing' -Username 'admin' -Password 'admin'

und

powershell.exe invoke-sqlcmd -Query "set nocount on;select configvalue from configuration where configkey = '1'" -ServerInstance "192.168.1.8" -Database 'Testing' -Username 'admin' -Password 'admin'

unterscheiden sich, indem der zweite Befehl mit der Meldung oben abbricht und eben nicht funktioniert.
Ich weiß nicht wo das Problem beim zweiten Befehl liegt. Kann mich jemand erleuchten?
 
Die Anführungszeichen passen nicht :

das sollte funktionieren
powershell.exe "invoke-sqlcmd -Query 'set nocount on;select configvalue from configuration where config
key = ''1''' -ServerInstance '192.168.1.8' -Database 'Testing' -Username 'admin' -Password 'admin'"

Aber warum nicht direkt in VB.NET ( ich hoffe Syntax passt bin kein VB Programmierer


Code:
Dim con As New SqlConnection
 Dim reader As SqlDataReader
    Try
        con.ConnectionString = "Data Source=192.168.1.8;Initial Catalog=Testing;Persist Security Info=True;User ID=admin;Password=admin"
        Dim cmd As New SqlCommand("select configvalue from configuration where configkey = '1'", con)
        con.Open()
        Console.WriteLine("Connection Opened")

        ' Execute Query    '
        reader = cmd.ExecuteReader()
        While reader.Read()
            Console.WriteLine(String.Format("{0}", reader(0)))
        End While
    Catch ex As Exception
        MessageBox.Show("Error while connecting to SQL Server." & ex.Message)
    Finally
        con.Close() 'Whether there is error or not. Close the connection.    '
    End Try
    'Return reader { note: reader is not valid after it is closed }          '
    Return "done"
 
  • Gefällt mir
Reaktionen: BelneaHP
Hi cloudman - danke für Deine schnelle und sehr hilfreiche Antwort. Ich hab Deinen Powershell command probiert - und der klappt tatsächlich.

Verstehe nicht ganz, weshalb es so auch klappt:
invoke-sqlcmd -Query """""set nocount on;select configvalue from configuration where configkey = '1'"""""" -ServerInstance "192.168.1.8" -Database 'Testing' -Username 'admin' -Password 'admin'

Sage und schreibe 5 Anführungszeichen bewirken wunder. Erklären kann ich es mir nicht. Dein Command gefällt mir da wesentlich besser :P

Noch besser ist natürlich direkt in vb.net zu bleiben, den Ansatz sollte ich mal verfolgen. Danke für den Code!
 
Zurück
Oben