AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [MSSQL+ADO] Wozu sp_prepare/sp_Unprepare
Thema durchsuchen
Ansicht
Themen-Optionen

[MSSQL+ADO] Wozu sp_prepare/sp_Unprepare

Ein Thema von alzaimar · begonnen am 5. Jul 2007 · letzter Beitrag vom 6. Jul 2007
Antwort Antwort
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#1

[MSSQL+ADO] Wozu sp_prepare/sp_Unprepare

  Alt 5. Jul 2007, 10:46
Datenbank: MS SQL-Server • Version: 2000 • Zugriff über: ADO
Hiho!

Beim Analysieren einer DB-Verbindung frage ich mich, wieso ADO jedes Skript erstmal mit 'sp_prepare' vorbereitet, dann mit 'sp_unprepare' weitermacht, um dann das Skript selbst auszuführen.
Das Lustige (na ja) ist, das ADO das auch dann macht, wenn ich im TADODataset die Eigenschaft 'Prepared' auf 'FALSE' setze. Nach allgemeinem Verständnis der englischen Sprache, der OH und nach Rückfrage mit meinem Großhirn, wo ab und an mein 'gesunder Menschenverstand' einen Zwischenstopp einlegt, sollte 'Prepared := False' doch eigentlich ADO davon abhalten, etwas derartiges zu machen, oder?
Auch ein Setzen von 'Use Procedure for Prepare=0' im Connectionstring der TADOConnection wird ignoriert.

So sieht das Skript aus, das ADO generiert:
SQL-Code:
declare @P1 int
exec sp_prepare @P1 output, NULL, N'select * from OrderView'
select @P1
go
exec sp_unprepare 3
go
select * from OrderView
go
Ist das nicht ein wenig krank?

Meine Fragen hierzu:

1. Was soll das?
2. Ist es sp_prepare/sp_unprepare wenigstens garantiert immer schneller?
3. If Answer(2)=NO Then 'Wie kann man das abstellen'

Zu 3: Eigentlich reicht es mir, wenn ADO einfach nur mein Skript/Befehl durchreicht, OHNE ihn mit 'sp_prepare' anzufassen.


NACHTRAG: Es passiert natürlich nur beim allerersten Mal, also wenn das Dataset zum 1.Mal geöffnet wird...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#2

Re: [MSSQL+ADO] Wozu sp_prepare/sp_Unprepare

  Alt 6. Jul 2007, 09:56
zu 1)
Das dient dazu alte Programme welche damals per ODBC zugriffen hatten und auf ado umgestellt worden zu optimieren in der geschwindigkeit. eigendlich erfüllt es heute keinen zweck mehr.
Man kann eine bessere optimierung erreichen wenn man selbst die sp's programmiert, was mircosoft auch inzwsichen so vor sieht. (s.h. .net ado)

zu 2)
Ja und Nein - Wenn du komplexe SQL's abschiesst dann optimiert er die in einer stored procedure. das bringt allerdings nur was wenn du die sql's nicht immer neu zusammen baust (mit string operationen), dann wird es langsamer. eine optimierung wird erreicht wenn du oft das gleiche sql ausführst.
(da empfielt sich aber eine sp zu programmieren)

zu 3)
ich schalte das in meinen anwendungen immer ab.

ich nutze folgenden connectionsstring an einen adoconnection objekt:
Code:
Connect=Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=datenbankname;Data Source=datenserver;Use Procedure for Prepare=0;Application Name=Anwendungsname
deine letzte frage:
es reicht wenn du nur den sql befehl rüber schiesst.
bei Use Procedure for Prepare=1 fummelt er sich das selbst hin mit dem sp's.
das ist das was du im profiler entdeckt hast.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: [MSSQL+ADO] Wozu sp_prepare/sp_Unprepare

  Alt 6. Jul 2007, 11:55
Hi generic,

Beim 1.Mal (und nur dann) ruft er prepare/unprepare aus, egal was man im Connectionstring einstellt. Meine Abhilfe: Ich halte die Datamodule in einem Pool, sodass das '1.Mal' nur ein mal auftritt.

Das Ganze ist ein 'stateless AppServer'.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#4

Re: [MSSQL+ADO] Wozu sp_prepare/sp_Unprepare

  Alt 6. Jul 2007, 13:36
benutzt du native ado oder die borland wrapper componeten die von tdataset abgeleitet sind?
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: [MSSQL+ADO] Wozu sp_prepare/sp_Unprepare

  Alt 6. Jul 2007, 13:42
Die Delphi-Wrapper. Aber so wie ich das sehe, wird 'Prepared' 1:1 durchgereicht...
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  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 14:14 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