![]() |
Datenbank: MS SQL 2002 • Zugriff über: ADO.NET
ADO.NET-Insert funktioniert nicht
Hilfeeeeeeeeeeeeeeeee!
Ich habe ein grosses Problem mit dem Anfügen und schreiben von Datensätzen in meiner MS SQL -Datenbank. Obwohl ich weder Syntax- noch Laufzeitfehler über den Webbrowser zurückbekomme, die Anwendung ohne Fehleranzeige abläuft, werden keine Datensätze in die Tabelle geschrieben.. Woran könnte das liegen. Hierz habe ich das Script mitgebracht.
Delphi-Quellcode:
Ausführen lasse ich dieses kleine Testanwendung über einen IE-Webbrowser.
procedure TWebForm1.Button1_Click(sender: System.Object; e: System.EventArgs);
var Connect : OLEDBConnection; ds : Dataset; cSQL : string; da : OleDBDataAdapter; InsCmd : OleDBCommand; begin // Connection connect := OleDBConnection.Create('Provider=SQLOLEDB;Data Source=163.123.31.128;Initial Catalog=migration; User ID=Steffens;password=test'); cSQL := 'INSERT INTO testtabelle (Name) VALUES (' + quotedstr('Peter') +')'; try connect.Open ; da := OleDBDataAdapter.Create; insCMD := OleDBCommand.create(cSQL, connect); da.InsertCommand := insCMD; connect.Close; label1.text := 'Alles in Ordnung'; except on ex: exception do label1.text := ex.Message; end; end; end. |
Re: ADO.NET-Insert funktioniert nicht
Zitat:
Zusätzliche Gesichtspunkte: Für den MS-SQL Server sind die Sql-Klassen vorgesehen (nicht OleDb). Der DbDataAdapter öffnet und schließt die Verbindung automatisch; auf connect.Open/Close kann meistens verzichtet werden. Der DbCommand-String soll niemals (NIEMALS!) als langer String erstellt werden, sondern die Werte sind per DbParameter hinzuzufügen:
Delphi-Quellcode:
Wie die Parameter im Befehlstext einzutragen sind, weiß ich nicht, das ist bei jedem DbProvider anders: mit oder ohne Parameter-Bezeichnung, mit '?' oder '@' oder ':' usw. Aber das hat nur Vorteile: Der DbProvider steuert QuotedStr selbst, regelt notwendige Konvertierungen und vermeidet überflüssige, und SQL-Injection wird verhindert.
cSQL := 'INSERT INTO testtabelle (Name) VALUES (?)';
insCMD := OleDBCommand.create(cSQL, connect); insCMD.Parameters.Add('Vorname', SqlDbType.String).Value = 'Peter'; Gruß Jürgen |
Re: ADO.NET-Insert funktioniert nicht
Zitat:
|
Re: ADO.NET-Insert funktioniert nicht
Hallo Jürgen Thomas,
Die Methode 'insCMD.ExecuteNonQuery()' hat mir schon sehr gut weitergeholfen . :bounce2: So klappt es auch mit dem Einfügen. Mit der Parametrisierung muss ich mir noch richtig reinziehen. Ich danke Dir recht herzlich !!!! PS: Ursprünglich hatte ich das auch mit SQLCommand ausprobiert. Nur dachte ich, es würde daran liegen. Ich habe stattdessen die OLEB-Variante ausprobiert... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz