Re: SqlDataAdapter1.SelectCommand.CommandType= CommandType.StoredProcedure
From: Elmar Boye (ElmarB_at_gmx.net)
Date: 02/12/05
- Previous message: Klaus Eckert: "SqlDataAdapter1.SelectCommand.CommandType= CommandType.StoredProcedure"
- In reply to: Klaus Eckert: "SqlDataAdapter1.SelectCommand.CommandType= CommandType.StoredProcedure"
- Next in thread: Klaus Eckert: "Re: SqlDataAdapter1.SelectCommand.CommandType= CommandType.StoredProcedure"
- Reply: Klaus Eckert: "Re: SqlDataAdapter1.SelectCommand.CommandType= CommandType.StoredProcedure"
- Messages sorted by: [ date ] [ thread ]
Date: Sat, 12 Feb 2005 21:39:55 +0100
Hallo Klaus,
Klaus Eckert <a@eckert-k.de> schrieb ...
zunächst gilt für die SqlDataAdapter.XXXCommand Eigenschaften,
dass dahinter immer ein SqlCommand steckt. Und alles folgende
gilt für ein SqlCommand äquivalent.
> bei der Einstellung SQLDataAdapter.CommandType.StoredProcedure
> kann man beim EXEC PROC keine Parameter beifügen.
das EXEC ist überflüssig und schädlich...
> Statt dessen muss CommandType.Text eingestellt werden.
... wenn Du nur den qualifizierten Prozedurnamen (Besitzer.ProzedurName)
im CommandText abstellst, so wäre das der richtige Weg,
mit und ohne Parameter.
> Meine Frage:
> Hat CommandType.StoredProcedure Vorteile gegenüber CommandType.Text,
CommandType.StoredProcedure wird intern als RPC Command abgesetzt,
da das TDS Protokoll das intern unterscheiden kann. Näheres zu
SQL RPC siehe SQL Server Dokumentation, u. a. beschrieben in
"Architektur remote gespeicherter Prozeduren", wobei die
Remote-Ausführungsmöglichkeiten zunächst keine Rolle spielen.
> und wenn ja welche,
Was allerdings in Bezug auf Durchsatz/Leistung für die Anwendung
selten einen grossen Unterschied macht.
> oder ist es vernünftig, generell CommandType.Text
> einzustellen, auch wenn keine Parameter beigefügt werden?
Nein - siehe oben.
Bei CommandType.Text wird in den Fällen, wo keine Parameter vorkommen
(Parameters.Count == 0), der SQL Befehl direkt übergeben.
Sobald Parameter vorkommen, wird die interne Prozedur sp_executesql
für die Ausführung und Parameterübergabe verwendet - bezüglich der
Vorteile siehe die SQL Server Online-Dokumentation zu sp_executesql.
Und prinzipiell ist es auch möglich Dein EXEC PROC damit zu verpacken
- mit ein bissel Nachdenken kommst Du bestimmt selbst darauf,
was aber ausser Umständen keinen Nutzen gibt.
Wichtiger ist bei sp_executesql ist, dass die Anweisungen intern wie
ein eigener Batch behandelt werden. Und so u. a. Variablen und lokale
temporäre Tabellen, die in dem Batch erstellt werden, unmittelbar
nach der Ausführung ungültig werden.
Was in dem einen oder anderen Falle unerwünscht sein kann, dann
(und am besten nur dann) muss man die Parameter direkt im CommandText
expandieren.
Gruss
Elmar
- Previous message: Klaus Eckert: "SqlDataAdapter1.SelectCommand.CommandType= CommandType.StoredProcedure"
- In reply to: Klaus Eckert: "SqlDataAdapter1.SelectCommand.CommandType= CommandType.StoredProcedure"
- Next in thread: Klaus Eckert: "Re: SqlDataAdapter1.SelectCommand.CommandType= CommandType.StoredProcedure"
- Reply: Klaus Eckert: "Re: SqlDataAdapter1.SelectCommand.CommandType= CommandType.StoredProcedure"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|