【问题标题】:How to call a stored procedure using asp classic?如何使用 asp classic 调用存储过程?
【发布时间】:2013-05-09 17:03:15
【问题描述】:

我正在使用 sql server 和 asp classic,目前正在调用这样的查询:

newHireSQL = "select * from NewHire where Archived = 0 order by HireID desc"

Set rsGetHireID = Server.CreateObject("ADODB.Recordset")
rsGetHireID.Open newHireSQL,ConnectionString,adOpenStatic

NumOfHireID = rsGetHireID.RecordCount

但我不想在这里使用查询语句,而是调用一个名为dbo.sp_selectNewHireSQL 的存储过程。我该怎么做?

谢谢

编辑:

我试过了

Dim Conn
SET Conn = Server.CreateObject("ADODB.Connection")
SET rsGetHireID = Server.CreateObject("ADODB.RecordSet")
Conn.Open ConnectionString
set rsGetHireID=Conn.Execute("Exec sp_selectNewHireSQL")

NumOfHireID = rsGetHireID.RecordCount
Response.Write (NumOfHireID)

但我得到了一个-1 记录计数值。

【问题讨论】:

    标签: sql stored-procedures asp-classic


    【解决方案1】:

    只是使用execexecute 声明:

    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open ConnectionString
    Conn.Execute "Exec sp_selectNewHireSQL"
    

    参考:http://msdn.microsoft.com/en-us/library/ms188332(v=sql.90).aspx

    【讨论】:

    • 我根据您的建议更新了我的原始帖子,但我的记录数为 -1。
    【解决方案2】:

    要使 RecordCount 正常工作,您需要使用正确的光标:

    Set rsGetHireID = Server.CreateObject("ADODB.RecordSet")
    Conn.Open ConnectionString
    rsGetHireID.CursorLocation = 3 'adUseClient
    rsGetHireID.Open "Exec sp_selectNewHireSQL", Conn
    NumOfHireID = rsGetHireID.RecordCount
    

    【讨论】:

      【解决方案3】:

      不要使用ADODB.Connection,而是尝试使用ADODB.Command,如下所示:

              Set objCommand = Server.CreateObject("ADODB.Command")
              objCommand.ActiveConnection = ConnectionString
              objCommand.CommandText = "dbo.sp_selectNewHireSQL"
              objCommand.CommandType = adCmdStoredProc ' you have to include adovbs.inc file or you can use 4
      
              Set rsGetHireID = objCommand.Execute()
              NumOfHireID = rsGetHireID.RecordCount
              Response.Write (NumOfHireID)    
      

      【讨论】:

      • 传递给存储过程的参数在哪里?我在原始 SQL 字符串中看到一个参数(值为 0):newHireSQL = "select * from NewHire where Archived = 0 order by HireID desc"
      【解决方案4】:
      <%
      
      
          dim db_conn
      
         db_conn = "Provider=SQLOLEDB.1;Server=server name;Database=dbname;Uid=sa; Pwd=123;"
      set conn = server.createobject("adodb.connection")
      set Cmd = Server.CreateObject("ADODB.Command")
      '-------------------------------------------------------
      conn.open (db_conn)
      '-------------------------------------------------------
      set rs = Server.CreateObject("ADODB.RecordSet")  
      sSQL = "EXEC sp_countrylist @countryname ='" & countryname & "'"
      set rs = conn.execute(sSQL) 
      
      if (rs.bof and rs.eof) then
          response.Write "<span class=""error"">No Record Found</span>"
          response.End
      end if %>
      

      【讨论】:

      • 错误答案。这会将您暴露给 Sql 注入。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      • 2012-09-07
      • 2014-05-30
      • 1970-01-01
      • 2021-12-29
      • 2012-12-25
      相关资源
      最近更新 更多