MsSQL und gequotet/escaped Feldnamen



  • nach Vorgabe muss ich Tabellen (dynamisch aus Konfiguration) erzeugen(und fuellen) seit kurzem muessen die Feldnamen auch gequotet/escaped werden

    z.B. heisst ein Feld "x[1].y[1,2].z"
    daraus wird "[x[1]].y[1,2]].z]"

    d.h. der ganze Feldname in [] und schliessende ] nochmal mit ] quoten

    das Create-Table Statement funktioniert damit problemlos

    1. PROBLEM

    nur mein Prüfungscode (seit Jahren im Einsatz) ob die Tabelle im richtigen Zustand ist funktioniert mit
    diesen gequoteten Feldern nicht?

    ...
    string[] restrictions = new string[]{null,null,"mein_table",null};
    DataTable columns = connection.GetSchema( "Columns", restrictions );
    
    for(int i = 0; i < columns.Rows.Count; ++i)
    {
      var name = columns.Rows[i]["COLUMN_NAME"].ToString();
      var type = columns.Rows[i]["DATA_TYPE"].ToString();
      Console.WriteLine("{0}: {1}", name, type);
    }
    ...
    

    GetSchema liefer einfach nur die ungequoteten Columns?

    also z.B. liefer GetSchema bei

    test_tabelle
      [x[1]].y[1,2]].z]
      a
      [x[1]].y]
      b
      [x[1]]]
      c
    

    nur a,b und c

    2. PROBLEM

    dazu nutze ich noch
    zur Vereinfachung bei meinen (generierten) Inserts-Statements den Feldnamen Parameter-Namen fuer den @/Value Ersatz
    aber System.Data.SqlClient.SqlParameter scheint diese Namen nicht zu moegen (nicht mit/ohne quoting)
    - kann das irgendwie doch erlauben?

    Irgendeiner eine Idee: die Feldnamen zu ändern ist gerade (noch) keine Option

    Danken



  • Kann ein Moderator den Post bitten nach C# verschieben - Sorry



  • Testweise

    select COLUMN_NAME, DATA_TYPE from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='test_tabelle'
    

    ausgefuehrt - liefert alle Felder

    warum GetSchema nicht?



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum C# und .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Verbuggter Treiber? Kannst du alternativ mal ne andere C# Library versuchen um mit dem Server zu plaudern?

    Und: Welchen DB-Server meinst du? MS-SQL (in dem Fall wäre üblich das S gross zu schreiben) oder MySQL (Tippfehler "s" statt "y")?

    Falls du MS-SQL meinst kannst du auch probieren mit " zu quoten (dazu muss allerdings die Option QUOTED_IDENTIFIER auf ON sein). (Bzw. MySQL sollte das auch können.) Wobei es mich dann ehrlich gesagt wundern würde dass weder GetSchema noch SqlParameter funktionieren. Die sollten IMO eigentlich beide mit den nicht gequoteten Namen klarkommen. Bzw. SqlParameter IIRC sogar mit beiden Varianten.

    Und falls du MySQL meinst... da würde es mich nicht wundern wenn die Library die du verwendest das einfach nicht kann.



  • Und: Welchen DB-Server meinst du? MS-SQL

    MSSql 2008 R2

    Verbuggter Treiber? Kannst du alternativ mal ne andere C# Library versuchen um mit dem Server zu plaudern?

    ich benutze einfach den (System.Data.SqlClient.)SqlConnection+SqlConnectionStringBuilder und SqlConnection.GetSchema
    -> denke dann geht es wohl ueber Microsoft ADO

    welchen Treiber kann ich denn sonst noch nutzen?

    Falls du MS-SQL meinst kannst du auch probieren mit " zu quoten (dazu muss allerdings die Option QUOTED_IDENTIFIER auf ON sein)

    darf an dem Server nichts umstellen

    Und falls du MySQL meinst... da würde es mich nicht wundern wenn die Library die du verwendest das einfach nicht kann.

    ist MSSql - aber ich verwende im Normalfall nur die Hersteller-Wege - keine anderen Libs


Log in to reply