verwendetes Datenbanksystem: <Adaptive Anywhere SQL / Sybase 9.0>
Hallo,
ich habe mal eine Frage zum DataAdapter:
Ich habe folgendes Szenario ich gebe einem DataAdapter ein DataSet indem genau eine Table enthalten ist, weiter gebe ich ihm ein Select Befehl mit dem das DataSet gefüllt worden ist. Nun ist der CommandBuilder im Stande mir SQL Befehle für Insert / Update und Delete zu erstellen.
Dies klappt soweit ganz gut, nur wird trotzdem ein Fehler in den SQL´s generiert.
Jetzt meine Frage kann ich mir auch die fertigen SQL´s anschauen, also nicht mit Fragezeichen sondern schon direkt mit gefüllten Werten? Ich bin dankbar für eure Hilfe. Hier mal ein Codeschnippsel wie es im Prinzip läuft:
using (DbConnection connection = dataFactory.CreateConnection())
{
connection.ConnectionString = connectionString;
connection.Open();
DbDataAdapter adap = dataFactory.CreateDataAdapter();
DbCommand command = dataFactory.CreateCommand();
DbCommandBuilder build = dataFactory.CreateCommandBuilder();
build.DataAdapter = adap;
command.CommandText = selectCommand;
command.Connection = connection;
adap.SelectCommand = command;
if (logger.IsDebugEnabled)
{
logger.DebugFormat("DBUpdateDataSetFromSelectCommand() InsertCommand : {0}", build.GetInsertCommand().CommandText);
logger.DebugFormat("DBUpdateDataSetFromSelectCommand() UpdateCommand : {0}", build.GetUpdateCommand().CommandText);
logger.DebugFormat("DBUpdateDataSetFromSelectCommand() DeleteCommand : {0}", build.GetDeleteCommand().CommandText);
}
try
{
int i = adap.Update(dataset);
if (logger != null)
if(logger.IsDebugEnabled)logger.Debug(string.Format("DBUpdateDataSet was succesfully performed on the database and affected {0} rows", i));
return i;
...
Die oben beschriebenen Logins geben mir nur die mit Fragezeichen ausgestatten Befehle wieder.
thanks in advance
LG MC#
Was anderes wirst du auch nicht bekommen.
Der DataAdapter such sich für jede zu ändernde datarow den jeweiligen
COmmand, bestückt dann erst die Parameter mit den werten, und schickt
das dann zur db.
Und wenn du mit Parametern arbeitest, kann es schon mal nicht an den erten liegen.
Ich tippe bei dieser art von Fehlermeldung eher auf Reservierte Wörter.
Hallo
erstmal danke für den Beistand. Ich habe das Problem ein wenig weiter eingegrenzt.
Meine Spalten in der Tabelle hießen vorher 0:00, 0:15, 0:30 etc. (Bitte keine Bemerkungen über Normalisierungen etc.. 🙂). Dann kommt der Fehler Error near '0'
Anschließen habe ich sie in 000, 015, 030 etc. umbenannt, dann kam Error near 000.
Wenn ich sie jetzt aber abc def etc nenne ist alles im Lack und es funktioniert. Gibt es irgendwo eine Vorschrift dass Spaltennamen nicht aus Zahlen bestehen dürfen ?
LG MC#
na klar.
Du hättest sie aber auch maskieren können.
Bei MSSQL wäre das [0:0].
[flame on]
Auch wenn du es nicht hören willst, zeigt die Namensgebung deutlich,
das der Designer übers knie gelegt gehört.
So ein design hat nichts mit SW-Entwicklen zu tun, das ist frickelei.
[flame off]
Hehe werds bestimmt weiterleiten 😉.
Leider haben Best Practices nicht immer viel mit dem Lehrbuch zu tun. Und ich kenn leider Datenbanken von denen ich Alpträume bekomme und die trotzdem jahrelang stabil und vor allem performant laufen.
Besten Dank auf jeden Fall für die Anteilnahme und ich wünsche hoffentlich hoch normalisierte Datenbanken. 😁
LG MC#