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 ADOwelchen 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