Ursprüngliche Adresse: http://www.51la.org/webjx/htmldata/2005-12-24/1135405777.html
Zusammenfassung Aufrufe gespeicherter Prozeduren werden häufig in B/S-Systemen verwendet. Die herkömmliche Aufrufmethode ist nicht nur langsam, sondern der Code wird auch mit zunehmender Anzahl gespeicherter Prozeduren immer größer, was die Wartung erschwert. Die neue Methode löst diese Probleme bis zu einem gewissen Grad.
Schlüsselwörter asp.net; gespeicherte Prozeduren Bei der Verwendung von .net ist der Datenbankzugriff ein sehr wichtiger Teil, insbesondere im Aufbauprozess des B/S-Systems ist der Datenbankbetrieb fast zu einem wesentlichen Vorgang geworden. Das Aufrufen gespeicherter Prozeduren zum Implementieren von Datenbankoperationen ist eine Methode, die von vielen Programmierern verwendet wird. Die meisten Programmierer verwenden gespeicherte Prozeduren, wenn sie können, und verwenden selten SQL-Anweisungen direkt, sodass gespeicherte Prozeduren sehr nützlich und wichtig sind.
Einführung in gespeicherte Prozeduren
Einfach ausgedrückt ist eine gespeicherte Prozedur eine gekapselte Prozedur, die aus einigen SQL-Anweisungen und Steueranweisungen besteht. Sie befindet sich in der Datenbank und kann von einer Clientanwendung oder von einer anderen Prozedur oder einem anderen Trigger aufgerufen werden. Seine Parameter können übergeben und zurückgegeben werden. Ähnlich wie Funktionsprozeduren in einer Anwendung können gespeicherte Prozeduren über ihren Namen aufgerufen werden und verfügen außerdem über Eingabe- und Ausgabeparameter.
Entsprechend den verschiedenen Rückgabewerttypen können wir gespeicherte Prozeduren in drei Kategorien einteilen: gespeicherte Prozeduren, die Recordsets zurückgeben, gespeicherte Prozeduren, die numerische Werte zurückgeben (auch skalare gespeicherte Prozeduren genannt) und verhaltensbasierte gespeicherte Prozeduren. Wie der Name schon sagt, handelt es sich bei dem Ausführungsergebnis einer gespeicherten Prozedur, die einen Datensatz zurückgibt, um einen Datensatz, der eine oder mehrere Bedingungen erfüllt, aus der Datenbank Nach der Ausführung wird beispielsweise eine Funktion oder ein Befehl mit einem Rückgabewert in der Datenbank ausgeführt. Schließlich wird die gespeicherte Verhaltensprozedur nur zum Implementieren einer bestimmten Funktion der Datenbank ohne Rückgabewert verwendet, z. B. Aktualisierungs- und Löschvorgänge in der Datenbank .
Vorteile der Verwendung gespeicherter Prozeduren
Im Vergleich zur direkten Verwendung von SQL-Anweisungen bietet der direkte Aufruf gespeicherter Prozeduren in einer Anwendung die folgenden Vorteile:
(1) Reduzieren Sie den Netzwerkverkehr. Es besteht möglicherweise kein großer Unterschied im Netzwerkverkehr zwischen dem Aufruf einer gespeicherten Prozedur mit einer kleinen Anzahl von Zeilen und dem direkten Aufruf von SQL-Anweisungen. Wenn die gespeicherte Prozedur jedoch Hunderte von SQL-Anweisungen enthält, ist ihre Leistung definitiv besser als der einzelne Aufruf von SQL-Anweisungen eins.
(2) Die Ausführungsgeschwindigkeit ist schneller. Dafür gibt es zwei Gründe: Erstens hat die Datenbank die gespeicherte Prozedur beim Erstellen bereits einmal analysiert und optimiert. Zweitens bleibt nach der Ausführung der gespeicherten Prozedur eine Kopie der gespeicherten Prozedur im Speicher erhalten, sodass bei der nächsten Ausführung derselben gespeicherten Prozedur diese direkt aus dem Speicher aufgerufen werden kann.
(3) Stärkere Anpassungsfähigkeit: Da gespeicherte Prozeduren über gespeicherte Prozeduren auf die Datenbank zugreifen, können Datenbankentwickler beliebige Änderungen an der Datenbank vornehmen, ohne die Schnittstelle für gespeicherte Prozeduren zu ändern, und diese Änderungen haben keine Auswirkungen auf die Datenbankanwendungen.
(4) Verteilte Arbeit: Die Codierungsarbeit von Anwendung und Datenbank kann unabhängig voneinander ausgeführt werden, ohne sich gegenseitig zu unterdrücken.
Aus der obigen Analyse können wir erkennen, dass es notwendig ist, gespeicherte Prozeduren in Anwendungen zu verwenden.
Zwei verschiedene Methoden zum Aufrufen gespeicherter Prozeduren
Um die Vorteile der neuen Methode hervorzuheben, stellen wir zunächst die „offizielle“ Methode zum Aufrufen gespeicherter Prozeduren in .net vor. Darüber hinaus funktionieren alle Beispielprogramme in diesem Artikel mit der SQLServer-Datenbank. Andere Situationen sind ähnlich und werden in Zukunft nicht einzeln erläutert. Alle Beispiele in diesem Artikel sind in C#-Sprache.
Um in einer Anwendung auf die Datenbank zuzugreifen, sind die allgemeinen Schritte: Deklarieren Sie zunächst eine Datenbankverbindung „sqlconnection“ und dann einen Datenbankbefehl „sqlcommand“, um SQL-Anweisungen und gespeicherte Prozeduren auszuführen. Mit diesen beiden Objekten können Sie je nach Bedarf unterschiedliche Ausführungsmethoden nutzen, um Ihre Ziele zu erreichen. Was hinzugefügt werden muss, ist, dass Sie nicht vergessen, der Seite die folgende Referenzanweisung hinzuzufügen: using system.data.sqlclient.
Was die Ausführung gespeicherter Prozeduren anbelangt: Wenn die erste Art von gespeicherter Prozedur ausgeführt wird, muss ein Datenadapter verwendet werden, um die Ergebnisse in einen Datensatz zu füllen, und dann kann das Datenraster-Steuerelement verwendet werden, um die Ergebnisse auf der Seite darzustellen. Wenn es sich bei der Ausführung um die zweite und dritte gespeicherte Prozedur handelt, ist diese Prozedur nicht erforderlich. Sie müssen lediglich anhand der spezifischen Rückgabe feststellen, ob der Vorgang erfolgreich abgeschlossen wurde.
(1) Der Code zum Ausführen einer gespeicherten Prozedur ohne Parameter lautet wie folgt:
sqlconnection conn=new sqlconnection("connectionstring");
sqldataadapter da = new sqldataadapter();
da.selectcommand = new sqlcommand();
da.selectcommand.connection = conn;
da.selectcommand.commandtext = "nameofprocedure";
da.selectcommand.commandtype = commandtype.storedprocedure;
Dann wählen Sie hier einfach die entsprechende Art und Weise aus, um den Vorgang für verschiedene Zwecke durchzuführen.
(2) Der Code zum Ausführen einer gespeicherten Prozedur mit Parametern lautet wie folgt (wir können die Funktion, die die gespeicherte Prozedur aufruft, als exeprocedure(string inputdate) deklarieren):
sqlconnection conn=new sqlconnection("connectionstring");
sqldataadapter da = new sqldataadapter();
da.selectcommand = new sqlcommand();
da.selectcommand.connection = conn;
da.selectcommand.commandtext = "nameofprocedure";
da.selectcommand.commandtype = commandtype.storedprocedure;
(Der obige Code ist derselbe, der folgende ist der hinzuzufügende Code)
param = new sqlparameter("@parametername", sqldbtype.datetime);
param.direction = parameterdirection.input;
param.value = konvertieren.todatetime(Eingabedatum);
da.selectcommand.parameters.add(param);
Dadurch wird ein Eingabeparameter hinzugefügt. Wenn Sie Ausgabeparameter hinzufügen müssen:
param = new sqlparameter("@parametername", sqldbtype.datetime);
param.direction = parameterdirection.output;
param.value = konvertieren.todatetime(Eingabedatum);
da.selectcommand.parameters.add(param);
So erhalten Sie den Rückgabewert einer gespeicherten Parameterprozedur:
param = new sqlparameter("@parametername", sqldbtype.datetime);
param.direction = parameterdirection.returnvalue;
param.value = konvertieren.todatetime(Eingabedatum);
da.selectcommand.parameters.add(param);
Aus dem obigen Code können wir ersehen, dass diese Methode einen großen Einfluss auf die Entwicklungsgeschwindigkeit hat, wenn viele gespeicherte Prozeduren oder viele Parameter in den gespeicherten Prozeduren vorhanden sind Die Datenbanklogik wird auch bei der zukünftigen Wartung eine große Belastung darstellen. Gibt es also eine verbesserte Möglichkeit, dieses Problem zu lösen? Ich dachte, wenn wir eine gespeicherte Prozedur ohne Parameter ausführen, müssen wir nur den Namen einer gespeicherten Prozedur übergeben, um die entsprechende gespeicherte Prozedur aufzurufen, und in der SQLServer-Datenbank können wir den Namen der gespeicherten Prozedur (Parameterliste) direkt eingeben. " im Abfrageanalysator. Gespeicherte Prozeduren können mit solchen Zeichenfolgen ausgeführt werden. Kann diese Idee also auf Anwendungen angewendet werden?
Geben Sie also den entsprechenden Code in den Compiler ein. Diese Codes werden basierend auf dem Code geändert, der die gespeicherte Prozedur ohne Parameter aufruft. Der spezifische Code lautet wie folgt:
sqlconnection conn=new sqlconnection("connectionstring");
sqldataadapter da = new sqldataadapter();
da.selectcommand = new sqlcommand();
da.selectcommand.connection = conn;
da.selectcommand.commandtext = "nameofprocedure('para1','para2',para3)";
da.selectcommand.commandtype = commandtype.storedprocedure;
Um den Code repräsentativer zu gestalten, sind der erste und der zweite Parameter der aufzurufenden gespeicherten Prozedur vom Typ String und der dritte Parameter vom Typ Integer. Nach der Ausführung stellte ich fest, dass die erwarteten Ergebnisse erzielt werden können!
Vergleich der beiden Aufrufmethoden Durch Vergleich können wir erkennen, dass die zweite Methode einen offensichtlichen Vorteil hat, nämlich die Entwicklungsgeschwindigkeit zu erhöhen, Entwicklungszeit zu sparen, den Code einfach zu warten und außerdem die Systemgröße zu verringern bis zu einem gewissen Grad. Da die Verarbeitung gespeicherter Prozedurparameter jedoch relativ allgemein ist, kann diese Methode die Anforderungen nicht erfüllen, wenn Sie Ausgabeparameter oder den Rückgabewert einer gespeicherten Prozedur abrufen möchten. Dennoch kann diese Methode es Entwicklern ermöglichen, einen großen Teil des Codes zu speichern. Wenn Sie die Ausgabeparameter und Rückgabewerte nicht benötigen, können Sie dies fast „ein für alle Mal“ tun. Daher hat diese Methode in der tatsächlichen Programmentwicklung immer noch einen gewissen praktischen Wert.