Я не понимаю, как вернуть читаемый набор записей из функции в классическом 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
Response.CodePage = 65001
. - person AnthonyWJones   schedule 01.10.2010