AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Prism ADO.NET-Insert funktioniert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

ADO.NET-Insert funktioniert nicht

Ein Thema von fly_singapore · begonnen am 12. Sep 2007 · letzter Beitrag vom 12. Sep 2007
Antwort Antwort
fly_singapore

Registriert seit: 31. Mär 2007
Ort: Kolbnitz/Bonn Österreich/Deutschland
96 Beiträge
 
Delphi 2006 Enterprise
 
#1

ADO.NET-Insert funktioniert nicht

  Alt 12. Sep 2007, 13:54
Datenbank: MS SQL 2002 • Zugriff über: ADO.NET
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:
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.
Ausführen lasse ich dieses kleine Testanwendung über einen IE-Webbrowser.
Peter Steffens
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#2

Re: ADO.NET-Insert funktioniert nicht

  Alt 12. Sep 2007, 15:00
Zitat von fly_singapore:
Delphi-Quellcode:
       connect.Open ;

       da := OleDBDataAdapter.Create;

       insCMD := OleDBCommand.create(cSQL, connect);
       da.InsertCommand := insCMD;
       // hier fehlt die Ausführung des Command

       connect.Close;
Hauptfehler: Es fehlt die Anweisung, dass der DbCommand überhaupt auszuführen ist. Beim Ausführen über den DbDataAdapter ist dazu DbDataAdapter.Update() vorgesehen; aber es geht auch direkt (ohne da) über insCMD.ExecuteNonQuery().

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:
     cSQL := 'INSERT INTO testtabelle (Name) VALUES (?)';
     insCMD := OleDBCommand.create(cSQL, connect);
     insCMD.Parameters.Add('Vorname', SqlDbType.String).Value = 'Peter';
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.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#3

Re: ADO.NET-Insert funktioniert nicht

  Alt 12. Sep 2007, 15:13
Zitat von Jürgen Thomas:
Zusätzliche Gesichtspunkte: Für den MS-SQL Server sind die Sql-Klassen vorgesehen (nicht OleDb).
Dazu noch als Ergänzung: Idealerweise verwendet man allerdings nur die Interfaces, damit man bei Bedarf die Datenbankschicht ohne weiteres austauschen kann.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
fly_singapore

Registriert seit: 31. Mär 2007
Ort: Kolbnitz/Bonn Österreich/Deutschland
96 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: ADO.NET-Insert funktioniert nicht

  Alt 12. Sep 2007, 15:23
Hallo Jürgen Thomas,


Die Methode 'insCMD.ExecuteNonQuery()' hat mir schon sehr gut weitergeholfen . 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...
Peter Steffens
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz