Autor Beitrag
WI-Student
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Sa 02.05.09 11:46 
Hallo,

ich habe ein Problem mit einem DB-Zugriff(Access). In der Tabelle ist eine Spalte vorhanden deren Namen ein Leerzeichen enthält ("mit Priorität"). Sobald ich das Feld mit in den Insert-Command aufnehme folgt eine Fehlermeldung("Syntaxfehler bei der INTO-Anweisung"). Wenn ich den Feldname mit Hochkommas umrande heißt es, dass das Feld unbekannt sei.
Wie muss ich den unten aufgeführten Code ändern, damit Spaltennamen mit Leerzeichen keine Fehlermeldung mehr hervorrufen?

adapter.InsertCommand = connection.CreateCommand();
adapter.InsertCommand.CommandText = "Insert into Aufgaben(ID, Aufgabentext, mit Priorität)values(@ID, @Aufgabentext, @mit Priorität)";
adapter.InsertCommand.Parameters.Add("@ID", OleDbType.Integer, 0, "ID");
adapter.InsertCommand.Parameters.Add("@Aufgabetext", OleDbType.Char, 0, "Aufgabentext");
adapter.InsertCommand.Parameters.Add("@mit Priorität", OleDbType.Integer, 0, "mit Priorität");

DateTime myDate = new DateTime(2003, 12, 6);
DataRow newRow = datatable.NewRow();
newRow["ID"] = 5;
newRow["Aufgabentext"] = "Halt dei Lapp";
newRow["mit Priorität"] = true;
datatable.Rows.Add(newRow);

adapter.Update(datatable);
datatable.AcceptChanges();
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 02.05.09 16:03 
Nach allem, was ich zu Access gelesen habe, sollte es so gehen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
adapter.InsertCommand.CommandText 
   = "Insert into Aufgaben(ID, Aufgabentext, [mit Priorität]) "
   + "values (@ID, @Aufgabentext, @mit_Priorität)";

adapter.InsertCommand.Parameters.Add("@mit_Priorität", OleDbType.Integer, 0"[mit Priorität]");

//  hier musst du probieren, ob das korrekt ist
newRow["[mit Priorität]"] = true;

Erklärung: Feldnamen in Access und MS-SQL, die unzulässige Zeichen enthalten, müssen in eckige Klammern eingebunden werden. (Bei anderen DBMS geht das mit Gänsefüßchen.) Als Parametername ist ein normaler Variablenname zu verwenden.

Übrigens ist AcceptChanges überflüssig; das wird durch den Update-Befehl automatisch ausgeführt. In der Tat gibt es fast keine Situation, wo es manuell aufzurufen ist.

Gruß Jürgen