Aussage: Dieser Artikel wurde in „Computer Applications“, Band 23, Ausgabe 11, veröffentlicht.
Zusammenfassung: Bei der Entwicklung verschiedener Systeme ist die Verwendung gespeicherter Prozeduren eine gute Angewohnheit, die nicht nur Funktionen wie temporäre Tabellen, Funktionen und Cursor mit sich bringt, sondern auch Debugging, Upgrades und Wartung werden bequemer. Allerdings befinden sich fast alle Aufrufe gespeicherter Prozeduren im gleichen Modus, und der Hauptunterschied besteht darin, dass die Parameter jeder gespeicherten Prozedur unterschiedlich sind. Ist es also möglich, eine Methode zu verwenden, um alle Aufrufe gespeicherter Prozeduren zu vereinheitlichen und unnötige Programmierung zu reduzieren? Basierend auf der Untersuchung der SQL Server-Datenbank und ASP.NET haben wir eine einheitliche Aufrufmethode implementiert. Diese Methode muss nur den Namen der aufzurufenden gespeicherten Prozedur angeben und beim Aufruf bestimmte Parameterwerte bereitstellen, damit alle gespeichert werden Prozedur aufgerufen werden kann.
Schlüsselwörter: gespeicherte Prozedur, Systemtabelle, Informationsstrukturansicht, ADO.NET Dokumentidentifikationscode: ② Bericht über praktische technische Leistungen (Technologie), Zusammenfassung des theoretischen Lernens und der sozialen Praxis (Sozialwissenschaften)
Rufen Sie gespeicherte Prozeduren in .NET auf die gleiche Weise auf
Zusammenfassung: Die Verwendung gespeicherter Prozeduren ist eine gute Angewohnheit bei der Entwicklung von Projekten. Sie stellt temporäre Tabellen, Funktionen und Cursor bereit, und auch das Debuggen, Aktualisieren und Warten kann davon profitieren. Fast alle Aufrufe einer gespeicherten Prozedur erfolgen jedoch nach demselben Muster Der Unterschied zwischen ihnen besteht in den Parametern jeder gespeicherten Prozedur. Können wir die gespeicherte Prozedur trotz ihrer Unterschiede auf die gleiche Weise aufrufen? Wir haben dies nach dem Studium von SQL Server und .NET getan Wenn Sie den Namen der gespeicherten Prozedur und die Werte ihrer Parameter angeben, müssen Sie die Parameter nicht selbst erstellen. Schlüsselwort: Stord-Prozedur, Systemtabelle, Informationsschema, ADO.NET
Zusammenfassung: Bei der Entwicklung eines Projekts rufen Sie häufig auf gespeicherte Prozeduren. Allerdings erfolgen fast alle Aufrufe gespeicherter Prozeduren nach dem gleichen Muster. Der Hauptunterschied liegt in der Art und dem Wert jedes erstellten Parameters. Ist es also möglich, alle gespeicherten Prozeduren über eine Funktion (oder Klasse) aufzurufen? In diesem Artikel wird eine einheitliche Aufrufmethode implementiert, die auf dem Prinzip der Verwendung der von der Datenbank bereitgestellten Systemtabellen basiert. Diese Methode muss lediglich den Namen der aufzurufenden gespeicherten Prozedur angeben und beim Aufruf bestimmte Parameterwerte bereitstellen, damit alle gespeicherte Prozedur aufgerufen werden kann.
Zusammenfassung: Wir müssen gespeicherte Prozeduren von Datenbanksystemen während der Entwicklung eines Projekts aufrufen. Der Aufruf gespeicherter Prozeduren ist jedoch fast gleich, der Hauptunterschied besteht im Unterschied zwischen Parametertyp oder -wert usw. Können wir gespeicherte Prozeduren aufrufen? Eine Funktion (oder eine Klasse)? Basierend auf den von Datenbanksystemen bereitgestellten Systemtabellen haben wir in diesem Artikel eine Klasse zum Aufrufen einer gespeicherten Prozedur geschrieben. Die einzigen Parameter, die Sie angeben, sind der Name der gespeicherten Prozedur und der Wert aller Parameter der gespeicherten Prozedur.
private void GetProcedureParameter(params object[]parameter)
{ SqlCommand myCommand2 = new SqlCommand();
myCommand2.Connection = this.myConnection;
myCommand2.CommandText = "select * from INFORMATION_SCHEMA.PARAMETERS where SPECIFIC_NAME = '" + this.ProcedureName + "' order by ORDINAL_POSITION";
SqlDataReader Reader = null; Reader = myCommand2.ExecuteReader(); // Rückgabeparameter erstellen
myParameter = new SqlParameter();
myParameter.ParameterName = "@Value";
myParameter . SqlDbType = SqlDbType.Int;
myParameter.Direction =
ParameterDirection.Parameters.Add(myParameter);
// Hier können Sie jeden Parameter automatisch erstellen
while(reader.Read())
{
myParameter = new SqlParameter();
myParameter.ParameterName = Reader["PARAMETER_NAME"].ToString();
myParameter.Direction = Reader["PARAMETER_MODE"].ToString()=="IN" ?ParameterDirection.Input:ParameterDirection.Output;
switch(reader["DATA_TYPE"].ToString()) {
case "int" :
if(myParameter.Direction == ParameterDirection.Input)
myParameter.Value = (int)parameters[i] ;
myParameter.SqlDbType=
SqlDbType.Int
; //...vielespezifische
Typverarbeitung wird weggelassen
}
i++
;
3.2 Rückgabeergebnisdatensatz, Rückgabewert und ausgehender Parametersatz Nachdem wir die Parameter der gespeicherten Prozedur erstellt haben, können wir die gespeicherte Prozedur aufrufen. Denn in .NET sind die am häufigsten verwendeten Klassen, die Ergebnismengen zurückgeben, SqlDataReader und DataSet, und SqlDataReader kann nur während der Aufrechterhaltung einer Verbindung verwendet werden, DataSet jedoch nicht. In unserer Implementierung soll die Verbindung nach dem Aufruf getrennt werden, daher wird ein DataSet zum Speichern der zurückgegebenen Ergebnismenge verwendet.
public SqlResult Call(params object[]parameters){ // SqlResult ist eine selbstdefinierte Klasse, die zum Speichern von Ergebnisdatensätzen, Rückgabewerten und ausgehenden Parametersätzen verwendet wird. result = new SqlResult(); // Definieren Sie Ihre eigene Verbindung als benötigt String
myConnection
= new SqlConnection(ConnectionString);
myCommand.CommandType
= CommandType.StoredProcedure
; // Get und erstellen Speichern Sie die Parameter der Prozedur und legen Sie die Werte fest.
GetProcedureParameter(parameters);
myAdapter.Fill(result.dataSet, "Table"); Holen Sie sich das ausgehende Parameterwert- und Namenspaar der gespeicherten Prozedur und speichern Sie es in einer Hashtable GetOutputValue(result) ; // Verschiedene Ressourcen hier freigeben und
myCommand.Dispose(
)
; myConnection.Dispose
(
);
4. Weitere Arbeiten Obwohl unsere Implementierung hier für die SQL Server-Datenbank gilt, kann diese Methode für jede Datenbank verwendet werden, die Informationsstrukturansichten bereitstellt, dem ANSI-92-Standard entspricht oder Metadaten bereitstellt. Wir kapseln es in eine SqlProcedure-Klasse, und die gespeicherte Prozedur kann bei Bedarf einfach aufgerufen werden, wodurch eine Menge sich grundsätzlich wiederholender Codearbeit reduziert wird. Damit die SqlProcedure-Klasse mehr Datentypen unterstützt, müssen Sie in der GetProcedureParameter()-Methode den Typ, die Richtung, die Länge, den Standardwert und andere Informationen jedes Parameters entsprechend Ihren eigenen Anforderungen analysieren und dann diesen Parameter erstellen. Grundsätzlich ist jeder Typ umsetzbar, auch Bildtypen können auf diese Weise erstellt werden. Auf diese Weise kann die Klasse sehr allgemein gehalten und in jedem Projekt nützlich sein.
Referenzen
[1] Ray Rankins, Paul Jensen, Paul Bertucci, SQL Server 2000 Practical Book, Beijing: Electronic Industry Press, 2002
[2] MSDN Library Januar 2003, Microsoft Corporation.
Über den Autor: Liu Zhibo (1979-), männlich, aus Xinhua, Hunan, Master-Abschluss, Hauptforschungsrichtungen: Neuronale Netzwerke und Mustererkennung, Büroautomatisierungsinformationssystem
E-Mail:[email protected]