gpt4 book ai didi

sql - 在经典 ASP 中使用存储过程 .. 执行并获取结果

转载 作者:行者123 更新时间:2023-12-04 23:22:02 24 4
gpt4 key购买 nike

我一整天都试图解决这个问题,但它似乎对我不起作用。我想执行一个命令并将结果返回到记录集。
问题是两件事之一:要么我得到一个空响应,要么我的代码有问题。我确信这个命令应该从数据库中获取几行。我加了 response.write在循环内,但它们从不打印。
这是代码:

Set conn = Server.CreateObject("ADODB.Connection")
conn.open "PROVIDER=SQLOLEDB;DATA SOURCE=X;DATABASE=Y;UID=Z;PWD=W;"
Set objCommandSec = CreateObject("ADODB.Command")
With objCommandSec
Set .ActiveConnection = Conn
.CommandType = 4
.CommandText = "usp_Targets_DataEntry_Display"
.Parameters.Append .CreateParameter("@userinumber ", 200, 1, 10, inumber)
.Parameters.Append .CreateParameter("@group ", 200, 1, 50, "ISM")
.Parameters.Append .CreateParameter("@groupvalue", 200, 1, 50, ismID)
.Parameters.Append .CreateParameter("@targettypeparam ", 200, 1, 50, targetType)
End With

set rs = Server.CreateObject("ADODB.RecordSet")
rs = objCommandSec.Execute

while not rs.eof
response.write (1)
response.write (rs("1_Q1"))
rs.MoveNext
wend
response.write (2)
已编辑
修改代码后,按照@Joel Coehoorn的回答,解决方法是:
set rs = Server.CreateObject("ADODB.RecordSet") 
rs.oppen objCommandSec
代替...
set rs = Server.CreateObject("ADODB.RecordSet") 
rs = objCommandSec.Execute

最佳答案

使用后的几个提示 多年

  • 无需创建ADODB.Connection您可以将连接字符串直接传递给 .ActiveConnection ADODB.Command 的属性(property)目的。这有两个好处,您不必实例化并打开另一个对象,并且因为上下文与 ADODB.Command 相关联。它将与 Set objCommandSec = Nothing 一起发布.
  • .Execute的常见原因返回关闭的记录集是由于 SET NOCOUNT ON未在 SQL 存储过程中设置为 INSERTUPDATE将生成受影响的记录计数和关闭的记录集。设置 SET NOCOUNT ON将停止这些输出,并且只会返回您预期的记录集。
  • 使用 ADODB.Recordset除非您需要前后移动并支持一些较少使用的方法,这些方法对于标准功能(例如将记录集显示到屏幕)来说是不需要的,否则循环浏览数据是多余的。而是尝试使用 Array .

    Dim conn_string, row, rows, ary_data

    conn_string = "PROVIDER=SQLOLEDB;DATA SOURCE=X;DATABASE=Y;UID=Z;PWD=W;"

    Set objCommandSec = CreateObject("ADODB.Command")
    With objCommandSec
    .ActiveConnection = conn_string
    .CommandType = 4
    .CommandText = "usp_Targets_DataEntry_Display"
    .Parameters.Append .CreateParameter("@userinumber ", 200, 1, 10, inumber)
    .Parameters.Append .CreateParameter("@group ", 200, 1, 50, "ISM")
    .Parameters.Append .CreateParameter("@groupvalue", 200, 1, 50, ismID)
    .Parameters.Append .CreateParameter("@targettypeparam ", 200, 1, 50, targetType)

    Set rs = .Execute()
    If Not rs.EOF Then ary_data = rs.GetRows()
    Call rs.Close()
    Set rs = Nothing
    End With
    Set objCommandSec = Nothing

    'Command and Recordset no longer needed as ary_data contains our data.
    If IsArray(ary_data) Then
    ' Iterate through array
    rows = UBound(ary_data, 2)
    For row = 0 to rows
    ' Return our row data
    ' Row N column 2 (index starts from 0)
    Call Response.Write(ary_data(1, row) & "")
    Next
    Else
    ' Nothing returned
    Call Response.Write("No data returned")
    End If
  • 关于sql - 在经典 ASP 中使用存储过程 .. 执行并获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21915874/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com