Heim > Datenbank > MySQL-Tutorial > Wie rufe ich Daten aus gespeicherten Prozeduren im klassischen ASP korrekt ab?

Wie rufe ich Daten aus gespeicherten Prozeduren im klassischen ASP korrekt ab?

DDD
Freigeben: 2025-01-10 08:04:57
Original
792 Leute haben es durchsucht

How to Correctly Retrieve Data from Stored Procedures in Classic ASP?

Klassisches ASP und gespeicherte Prozeduren: Effizienter Datenabruf

Das Abrufen von Daten aus gespeicherten Prozeduren in klassischen ASP-Anwendungen stellt oft eine Herausforderung dar. Dieser Artikel befasst sich mit einem häufigen Problem, bei dem die Ausführung einer gespeicherten Prozedur ein Recordset nicht auffüllt, was zu einer leeren oder falschen Antwort führt.

Das Problem: Leere Datensätze

Entwickler stoßen häufig auf Situationen, in denen ihr klassischer ASP-Code, der zum Abrufen von Daten aus einer gespeicherten Prozedur entwickelt wurde, ein leeres Recordset zurückgibt. Der Datenbankbefehl scheint korrekt zu sein, aber auf die erwarteten Daten kann weiterhin nicht zugegriffen werden.

Codebeispiel und Analyse

Sehen wir uns einen typischen Codeausschnitt an, der dieses Problem veranschaulicht:

Set conn = Server.CreateObject("ADODB.Connection")
conn.open "PROVIDER=SQLOLEDB;DATA SOURCE=X;DATABASE=Y;UID=Z;PWD=W;"
Set objCommandSec = CreateObject("ADODB.Command")
With objCommandSec
    Set .ActiveConnection = Conn
    .CommandType = 4
    .CommandText = "usp_Targets_DataEntry_Display"
    .Parameters.Append .CreateParameter("@userinumber ", 200, 1, 10, inumber)
    .Parameters.Append .CreateParameter("@group ", 200, 1, 50, "ISM")
    .Parameters.Append .CreateParameter("@groupvalue", 200, 1, 50, ismID)
    .Parameters.Append .CreateParameter("@targettypeparam ", 200, 1, 50, targetType)
End With

set rs = Server.CreateObject("ADODB.RecordSet")
rs = objCommandSec.Execute

while not rs.eof
    response.write (1)
    response.write (rs("1_Q1"))
    rs.MoveNext
wend
response.write (2)
Nach dem Login kopieren

Die Lösung: Korrekter Umgang mit Recordsets

Das Kernproblem liegt in dieser Zeile:

rs = objCommandSec.Execute
Nach dem Login kopieren

Diese falsche Zuordnung verhindert den ordnungsgemäßen Datenabruf. Der korrigierte Ansatz lautet:

set rs = Server.CreateObject("ADODB.RecordSet")
rs.open objCommandSec
Nach dem Login kopieren

Durch die Verwendung von rs.open objCommandSec öffnen wir das Recordset mithilfe des Befehlsobjekts korrekt und ermöglichen so den Datenabruf.

Best Practices für die Interaktion mit gespeicherten Prozeduren

Hier sind einige empfohlene Vorgehensweisen zur Verbesserung der Effizienz und Zuverlässigkeit Ihres klassischen ASP-Codes bei der Interaktion mit gespeicherten Prozeduren:

  • Direkte Verbindung innerhalb des Befehls: Anstatt ein separates ADODB.Connection zu erstellen und zu öffnen, weisen Sie die Verbindungszeichenfolge direkt der .ActiveConnection-Eigenschaft des ADODB.Command-Objekts zu. Dies vereinfacht den Code und verbessert die Leistung.

  • SET NOCOUNT ON: Für gespeicherte Prozeduren, die INSERT- oder UPDATE-Vorgänge ausführen, schließen Sie SET NOCOUNT ON in Ihren SQL-Code ein. Dadurch wird verhindert, dass die gespeicherte Prozedur eine Anzahl der betroffenen Zeilen zurückgibt, was zu einem vorzeitig geschlossenen Recordset führen kann.

  • Erwägen Sie der Einfachheit halber Arrays: Für eine einfachere Datenverarbeitung sollten Sie für die Iteration durch die Ergebnisse die Verwendung von Arrays anstelle von ADODB.Recordset in Betracht ziehen. Dies kann oft zu effizienterem und besser lesbarem Code führen.

Das obige ist der detaillierte Inhalt vonWie rufe ich Daten aus gespeicherten Prozeduren im klassischen ASP korrekt ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage