Я не понимаю, как мне вернуть читаемый набор записей из функции в классическом 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 не может быть найден в коллекции, соответствующей запрошенному имени или порядковому номеру.
ошибка.
Заменив его на Response.Write Count.Status
Я получаю Операция не разрешена, когда объект закрыт.
ошибка.
Добавление Count.Open
дает Соединение не может использоваться для выполнения этой операции. В данном контексте он либо закрыт, либо недействителен.
ошибка.
Редактировать после ответа Марка B:
Я уже просмотрел отключенные наборы записей, но не знаю, как их использовать в моем примере: каждый учебник передает запрос непосредственно в набор записей с помощью 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