Warum kann ich mit OLEDB in einer gespeicherten Prozedur kein Recordset zurückgeben?
Ich habe einmal ein Programm geschrieben, das mit einer temporären Tabelle arbeitet (die Hauptfunktion besteht darin, die obersten 10 Datensätze jeder Kategorie abzurufen).
Die gespeicherte Prozedur verwendet ODBC, um eine normale Verbindung zur Datenbank herzustellen und korrekte Ergebnisse zu erhalten. Wenn Sie jedoch oledb zum Herstellen einer Verbindung verwenden, kann der Datensatz nicht zurückgegeben werden. Sobald der Vorgang den Datensatz zurückgibt, wird eine Fehlermeldung angezeigt:
ADODB.Recordset-Fehler „800a0e78“
Der von der Anwendung angeforderte Vorgang ist nicht zulässig, wenn das Objekt geschlossen ist.
Es verwirrt mich. Warum ist das so?
Dies liegt daran, dass es einen Unterschied zwischen OLEDB und ODBC gibt. Das heißt, wenn ASP den Datensatz von ODBC erhält, filtert ODBC die von der Erstellungstabelle erstellten Datensätze heraus.
Oder „Einfügen in“ generiert einige Datensatzsätze, die nur Positionen belegen, aber keine Operationen ausführen können. Wenn ASP den Datensatzsatz von OLEDB erhält, tut OLEDB dies nicht
Diese Recordsets werden nicht herausgefiltert. Daher sollten wir „set nocount on“ ausführen, bevor wir das Recordset in der gespeicherten Prozedur zurückgeben.
Gespeicherte Prozeduren dürfen keine Recordsets zurückgeben; um Recordsets zurückzugeben, muss zuerst „set nocount off“ ausgeführt werden. Auf diese Weise wird das Problem gelöst.