Guten morgen,
ich lade Tabellen aus einer DB in ein DataTable und binde dieses an eine DataGridView.
Der User kann beliebige Änderungen vornehmen.
Diese werden dann mittels Knopfdruck an die DB überspielt.
Das klapp soweit auch schon sehr gut.
Nur bei einer Tabelle laufe ich auf einen Fehler.
Diese hat eine Spalte namens 'PLAN'.
Der Fehler läßtsich wie feolgt reproduzieren:
Server-Seite:
CREATE TABLE [dbo].[Test](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Plan] [nvarchar](29) NULL,
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
INSERT INTO Test
VALUES
('Ein Wert'),
('Noch ein Wert')
Client-Seite:
public static void PlanError()
{
int changedRows = 0;
OleDbCommand cmd = new OleDbCommand();
OleDbConnection con = new OleDbConnection(@"Provider=SQLOLEDB.1;Data Source=server11;Integrated Security=SSPI;Initial Catalog=<Datenbankname>");
cmd.Connection = con;
cmd.CommandText = "SELECT * FROM Test";
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
DataTable dataTable = new DataTable();
try
{
adapter.Fill(dataTable);
DataRow dataRow = dataTable.NewRow();
// einen neuen Wert einfügen
dataRow["Plan"] = "Ganz neuer Wert";
dataTable.Rows.Add(dataRow);
OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
changedRows = adapter.Update(dataTable);
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
Führt man die Methode 'PlanError' aus, so kommt folgende Fehler:
Fehler |
Falsche Syntax in der Nähe des 'Plan'-Schlüsselworts. |
Das vom CommandBuilder erzeugte Insert-Statement lautet
INSERT INTO Test (Plan) VALUES (?)
Führe ich den SQL-Befehl im Management-Studio aus, z.B.
INSERT INTO Test (Plan) VALUES ('Ganz neuer Wert')
bekomme ich auch obigen Fehler.
Es funktioniert aber, wenn ich den Spaltennamen 'Plan' in eckige Klammern setze.
INSERT INTO Test ([Plan]) VALUES ('Ganz neuer Wert')
Leider erzeugt der OleDbCommandBuilder das Insert-Statement ohne diese eckigen Klammern.
Deswegen meine Frage: Gibt es irgendwelche Einstellungen, die den OleDbCommandBuilder die Spaltennamen in eckige Klameern zu setzen?
Oder gibt es einen anderen Ansatz, das Problem zu lösen?
Die Tabellenstruktur und damit die Spaltenbezeichner sind vorgegeben und können nicht geändert werden.
Ich bin für jede Anregung dankbar!