Страница ASP не отображает хранимую процедуру OUTPUT - PullRequest
1 голос
/ 03 августа 2011

У меня есть страница ASP, вызывающая хранимую процедуру с возвращенными значениями и параметрами OUTPUT.

Выходные параметры не отображаются, и я не понимаю, почему:

<%
  dim Objrs, cmd
  set Objrs = Server.CreateObject("ADODB.RecordSet")
  set cmd = Server.CreateObject("ADODB.Command")
  set conn = Server.CreateObject("ADODB.Connection")
  conn.Open strConnect
  set cmd.ActiveConnection = conn
  cmd.CommandText="MKTG_Current"
  cmd.CommandType=adCmdStoredProc
  cmd.Parameters.Append cmd.CreateParameter("@added", 135, 2)
  cmd.Parameters.Append cmd.CreateParameter("@named", 200, 2, 50)

  set Objrs = cmd.Execute
%>
    </div>
    <div id="recent-news-box" class="rounded-corners-top dropshadow">
      <h3 class="border-dashed-b">Updated on: <%=Objrs.state%></h3>
      <div>
<%
    While Not Objrs.EOF
        Response.Write Objrs("Subject")
        Objrs.MoveNext
    Wend
  name_of_table = cmd.Parameters("@named").value
  added = cmd.Parameters("@added").value
  set cmd = nothing
  set Objrs = nothing
  conn.close
  set conn = nothing
        Response.Write name_of_table
        Response.Write added    
%>
          </div>
         </div>
      </div>

Я пытался изменить положение элементов вывода, но безрезультатно.

1 Ответ

0 голосов
/ 03 августа 2011

Существует некоторое неудобство из-за способа, которым ADO возвращает результаты команды как в набор записей, так и в качестве выходных параметров.

Они доступны после закрытия возвращенного набора записей, поэтому этот порядок должен работать:

  set Objrs = nothing

  name_of_table = cmd.Parameters("@named").value
  added = cmd.Parameters("@added").value

  set cmd = nothing
  conn.close
  set conn = nothing

  Response.Write name_of_table
  Response.Write added 

В качестве альтернативы можно оставить код в том виде, в котором он добавлен, для переключения на курсор на стороне клиента с помощью:

  conn.Open strConnect
  conn.CursorLocation = 3 '//aduseclient
  set cmd.ActiveConnection = conn

(Также убедитесь, что использование adCmdStoredProc не следует заменять его числовымзначение, если вы не связаны с библиотекой типов)

...