none
Power Shell Zugriff auf SQL Tabellen mit führenden Zahlen oder Sonderzeichen funktioniert nicht RRS feed

  • Frage

  • Ich verwende Power Shell für die unterschiedlichsten Zugriffe auf MSSQL Datenbanken und das zumeist ohne Probleme.

    in der Form:

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "xyz"
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand

    $SqlCmd.CommandText = "xyz"

    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $SqlAdapter.SelectCommand.CommandTimeout = 0
    $DataSet = New-Object System.Data.DataSet 
    $tablerows = $SqlAdapter.Fill($DataSet)

    Jetzt habe ich allerdings eine Tabelle in der Form [1$Irgendwas] vorliegen, die in der Power Shell Fehlermeldungen liefert weil aus diesem Tabellennamen (wenn man sich den $SqlCmd anschaut) eine Tabelle in der Form [1] generiert?!?

    Ich habe schon alle möglichen Klammerungen, Escape Sequenzen, usw. probiert, komme aber zu keinem Ergebnis.

    Muss ich mir hier einen View ohne führende Zahlen, oder Sonderzeichen wie das $ Zeichen bauen, um via Power Shell zugreifen zu können, oder gibt es hier eine "normale" Lösung?

    Liebe Grüße und danke für Antworten im Voraus,
    Robert


    Donnerstag, 7. November 2019 18:08

Antworten

  • Der Name sollte a) in einer Variablen oder b) in Hochkomma stehen.
    Bei doppelten Hochkomma ist die Variablenersetzung zu berücksichtigen:

    https://powershellexplained.com/2017-01-13-powershell-variable-substitution-in-strings/

    Also

    Form['1$Name']

    oder

    $Name = '1$Name'
    Form[$Name]

    Donnerstag, 7. November 2019 22:19
  • Moin,

    Bitte Code immer als Code posten (Button im Editor)!

    Sonderzeichen, die für Powershell eine Bewandntnis haben, hier z. B. Das Dollarzeichen, musst Du escapen - in Powershell ist das Zeichen dafür der Backtick (schräges Hochkomma von oben links nach unten rechts).

    Wenn also in der Variablen $a der Text "xxx" steht und die Variablen $b leer ist, passiert folgendes:

    '1$a' ergibt 1$a

    "1$a" ergibt 1xxx

    "1$b" ergibt 1

    "1ˋ$a" ergibt 1$a


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Freitag, 8. November 2019 05:35

Alle Antworten

  • Der Name sollte a) in einer Variablen oder b) in Hochkomma stehen.
    Bei doppelten Hochkomma ist die Variablenersetzung zu berücksichtigen:

    https://powershellexplained.com/2017-01-13-powershell-variable-substitution-in-strings/

    Also

    Form['1$Name']

    oder

    $Name = '1$Name'
    Form[$Name]

    Donnerstag, 7. November 2019 22:19
  • Moin,

    Bitte Code immer als Code posten (Button im Editor)!

    Sonderzeichen, die für Powershell eine Bewandntnis haben, hier z. B. Das Dollarzeichen, musst Du escapen - in Powershell ist das Zeichen dafür der Backtick (schräges Hochkomma von oben links nach unten rechts).

    Wenn also in der Variablen $a der Text "xxx" steht und die Variablen $b leer ist, passiert folgendes:

    '1$a' ergibt 1$a

    "1$a" ergibt 1xxx

    "1$b" ergibt 1

    "1ˋ$a" ergibt 1$a


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Freitag, 8. November 2019 05:35
  • Hallo Evgenij,

    danke für die Antwort. Das verkehrte, einfache Hochkomma (backtick) vor dem $ Zeichen funktioniert perfekt!

    Montag, 11. November 2019 06:31
  • Was du dir ebenso sparen kannst, wenn du die Zeichenkonstante in einfache Hochkomma steckst, da dann $x nicht interpretiert wird.
    Montag, 11. November 2019 08:28
  • Das funktioniert aber wie schon ganz oben beschrieben nicht!
    Das hätte ich ja schon bei meinen zahlreichen Klammerungsversuchen probiert.
    Weder '1$Irgendwas', noch 1'$Irgendwas', noch irgendwelche andere "Klammerungen" greifen, es wird immer '1' als Ergebnis erzeugt.
    Aber der backtick reicht mir
    Robert
    Dienstag, 12. November 2019 06:10