【问题标题】:Classic ASP - ADO execute Stored Procedure passing in parameters经典 ASP - ADO 执行传入参数的存储过程
【发布时间】:2014-02-04 19:31:09
【问题描述】:

我需要使用 Classic ASP 将参数传递到存储过程。我确实看到有些人使用 Command 对象而其他人不使用它。

我的存储过程参数是这样的:

@RECORD_NUMBER decimal(18,0),
@ErrorType nvarchar(100),
@INSURANCE_CODE smallint,
@CompanyId int,
@INS_ID_NUM nchar(22)   

然后我正在尝试这样做:

Dim conn, rsSet,rsString, cmd

Dim RN,ET,IC,CI,IIN
RN = Request.Form("Record_Number")
ET = Request.Form("ErrorType")
IC = Request.Form("INSURANCE_CODE")
CI = Request.Form("CompanyID")
IIN = Request.Form("INS_ID_NUM")

set conn = server.CreateObject("adodb.connection")
set rsSet = Server.CreateObject ("ADODB.Recordset")


conn.Open Application("conMestamed_Utilities_ConnectionString")
rs_string = "apUpdateBill " & RN &",'" &  ET & "'," & IC & "," & CI & ",'" & IIN & "'"
rsSet.Open rsString, conn, adOpenForwardOnly,, adCmdText

(我不需要 Recordset,我只是想让它发送数据)

错误:
ADODB.Recordset 错误“800a0bb9”
参数类型错误、超出可接受范围或相互冲突。

我已经尝试过命令的东西,但我得到了“精确”错误 我“必须”使用命令对象吗?

例如

Set cmd = Server.CreateObject("ADODB.Command")
'Set cmd.ActiveConnection = conn
'cmd.CommandText = "apUpdateBill"
'cmd.CommandType = adCmdStoredProc
'Cmd.Parameters.append Cmd.createParameter("@Record_Number", adDecimal, adParamInput, 18)
'Cmd.Parameters("@Record_Number").Precision = 0
'Cmd.Parameters("@Record_Number").value = Request.Form("Record_Number")

【问题讨论】:

    标签: stored-procedures asp-classic ado


    【解决方案1】:

    你会这样做,你不需要创建一个记录集对象,因为它是一个更新存储过程:

    'Set the connection
    '...............
    
    'Set the command
    DIM cmd
    SET cmd = Server.CreateObject("ADODB.Command")
    SET cmd.ActiveConnection = Conn
    
    
    'Prepare the stored procedure
    cmd.CommandText = "apUpdateBill"
    cmd.CommandType = 4  'adCmdStoredProc
    
    cmd.Parameters("@RECORD_NUMBER") = Request.Form("Record_Number") 
    cmd.Parameters("@ErrorType") = Request.Form("ErrorType") 
    cmd.Parameters("@INSURANCE_CODE") = Request.Form("INSURANCE_CODE")
    cmd.Parameters("@CompanyId") = Request.Form("CompanyID") 
    cmd.Parameters("@INS_ID_NUM") = Request.Form("INS_ID_NUM")
    
    'Execute the stored procedure
    'This returns recordset but you dont need it
    cmd.Execute
    
    Conn.Close
    SET Conn = Nothing
    

    【讨论】:

    • 查清。你升职了!!
    • 好的,但是为什么人们要做所有的 Cmd.Parameters.append Cmd.createParameter("@Record_Number", adDecimal, adParamInput, 18) ?为了娱乐?为了精确控制?好痛啊……
    • 大声笑我不知道为什么我相信有些人更喜欢明确。即使在 ASP.NET 中,我也更愿意让 ADO 来确定不易出错的数据类型
    • @user3183930 你知道有一种更简单的方法可以做到这一点Call cmd.Execute(, Array(Request.Form("Record_Number"), Request.Form("ErrorType"), Request.Form("INSURANCE_CODE"), Request.Form("CompanyID"), Request.Form("INS_ID_NUM"))) 我个人更喜欢.Parameter.Append(.CreateParameter( 方法。
    • 您,先生(meda)...是救生员!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多