Non riesco a restituire un recordset leggibile da una funzione nel classico ASP.Restituire il recordset dalla funzione nel classico ASP
Questo è quello che mi è venuta, ma non funziona:
Response.Clear
Response.CharSet = "utf-8"
Response.ContentType = "text/plain"
Dim Count
Set Count = Test
Response.Write Count.Fields(0).Value
Function Test
Dim Query, Connection, Command, Recordset
Query = " blah blah blah "
Set Connection = Server.CreateObject("ADODB.Connection")
Set Command = Server.CreateObject("ADODB.Command")
Set Recordset = Server.CreateObject("ADODB.Recordset")
Connection.ConnectionString = "blah blah blah"
Connection.Open
Set Command.ActiveConnection = Connection
Command.CommandText = Query
Set Recordset = Command.Execute
Set Test = Recordset
Recordset.Close
Connection.Close
Set Recordset = Nothing
Set Command = Nothing
Set Connection = Nothing
End Function
La linea Response.Write Count.Fields(0).Value
cede l'errore Item cannot be found in the collection corresponding to the requested name or ordinal.
.
Sostituirlo con Response.Write Count.Status
Viene visualizzato l'errore Operation is not allowed when the object is closed.
.
L'aggiunta di Count.Open
dà l'errore The connection cannot be used to perform this operation. It is either closed or invalid in this context.
.
Modifica dopo la risposta di Mark B:
ho già guardato record disconnessi, ma non so come usarli nel mio esempio: ogni esercitazione alimenta la query direttamente nel set di record con Recordset.Open
, ma io sto usando le query parametrizzate, e anche provando in molti modi non sono riuscito a ottenere lo stesso risultato quando c'è un ADODB.Command
nel modo.
Cosa devo fare?
Grazie in anticipo.
Ecco la soluzione basata sulla risposta di Eduardo Molteni:
La funzione che interagisce con il database:
Function Test
Dim Connection, Command, Recordset
Set Connection = Server.CreateObject("ADODB.Connection")
Set Command = Server.CreateObject("ADODB.Command")
Set Recordset = Server.CreateObject("ADODB.Recordset")
Connection.ConnectionString = "blah blah blah"
Connection.Open
Command.ActiveConnection = Connection
Command.CommandText = "blah blah blah"
Recordset.CursorLocation = adUseClient
Recordset.Open Command, , adOpenForwardOnly, adLockReadOnly
Set Recordset.ActiveConnection = Nothing
Set Test = Recordset
Connection.Close
Set Recordset = Nothing
Set Command = Nothing
Set Connection = Nothing
End Function
Il codice che chiama la funzione:
Response.Clear
Response.CharSet = "utf-8"
Response.ContentType = "text/plain"
Dim Recordset
Set Recordset = Test
Response.Write Recordset.Fields(0).Value
Recordset.Close
Set Recordset = Nothing
tuo pezzo finale di codice manca 'Response.CodePage = 65001'. – AnthonyWJones