Я в недоумении, как вернуть читаемый набор записей из функции в классическом ASP.
Это то, что я придумал, но это не работает:
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
Строка Response.Write Count.Fields(0).Value
выдает ошибку Item cannot be found in the collection corresponding to the requested name or ordinal.
.
Замена ее на Response.Write Count.Status
Я получаю ошибку Operation is not allowed when the object is closed.
.
Добавление Count.Open
дает ошибку The connection cannot be used to perform this operation. It is either closed or invalid in this context.
.
Редактировать после ответа Марка Б:
Я уже посмотрел на отключенные наборы записей, но я не знаю, как их использовать в моем примере: каждое руководство направляет запроспрямо в набор записей с помощью Recordset.Open
, но я использую параметризованные запросы и даже пытаюсь многими способами, но не могу получить тот же результат, когда есть ADODB.Command
.
Что мне делать?
Заранее спасибо.
Вот решение, основанное на ответе Эдуардо Мольтени:
Функция, которая взаимодействует с базой данных:
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
Код, который вызывает функцию:
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