【问题标题】:What's wrong in Classic ASP StoredProcedure insert statement经典 ASP StoredProcedure 插入语句有什么问题
【发布时间】:2013-05-24 17:32:37
【问题描述】:

这是经典的 ASP 代码

Set objCommandSec = CreateObject("ADODB.Command")
        With objCommandSec
            Set .ActiveConnection = MyConn
            .CommandType = adCmdStoredProc
            .CommandText = "ReportsPDFInsert"

            .CreateParameter "@StatsID", adInteger, adParamInput
            .Parameters("@StatsID") = xStats_ID

            .CreateParameter "@MemberID", adInteger, adParamInput
            .Parameters("@MemberID") = xMemberID

            .CreateParameter "@LanguageID", adInteger, adParamInput
            .Parameters("@LanguageID") = 1  '1=EN

            .CreateParameter "@PDFFilename", adVarWChar , adParamInput
            .Parameters("@PDFFilename") = PDFFilename

            .Execute
        End With 

这是存储过程代码

ALTER PROCEDURE [dbo].[ReportsPDFInsert]
-- Add the parameters for the stored procedure here
@StatsID INT
,@MemberID INT
,@LanguageID     INT
,@PDFFilename NVARCHAR(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
INSERT INTO [dbo].[ReportsPDF]
       ([StatsID]
       ,MemberID
       ,[LanguageID]
       ,[PDFFilename]
       ,[DateCreated])
 VALUES
       (@StatsID
       ,@MemberID
       ,@LanguageID
       ,@PDFFilename
       ,GETDATE())

END

我得到错误

错误号:-2147217904

错误描述:过程“ReportsPDFInsert”需要参数“@StatsID”,但未提供。

来源:Microsoft OLE DB Provider for SQL Server

如果我自己执行存储过程,那么它工作正常。我在其他页面中有类似的经典 asp 代码,也可以正常工作。是的,我确定 xStats_ID 确实有价值。我在 .Execute 之前打印,我看到了值。

请有人解释一下。谢谢

【问题讨论】:

  • MyConn 是连接字符串还是连接对象?试试.ActiveConnection = MyConn

标签: stored-procedures asp-classic


【解决方案1】:

尝试使用类似这样的方式显式附加参数:

cmd.Parameters.Append cmd.CreateParameter("@StatsID",adInteger, adParamInput,xStats_ID)

而不是.Parameters("")

这是另一个可能有帮助的帖子: How to make a parametrized SQL Query on Classic ASP?

【讨论】:

  • 不,同样的错误信息,我什至尝试使用 0 作为尺寸参数
  • 虽然这并没有解决 OP 遇到的具体问题,但这是个好建议。需要注意的是,CreateParameter 本身仅创建一个 Parameter 对象,没有将其附加到 Parameters 集合中。原始代码起作用的原因是 ADO 正在查询数据库以自动填充集合(请参阅docs)。 OP 中的 CreateParameter 调用是不必要的。
【解决方案2】:

直到今天我才发现问题所在。

我没有包含 adovbs.inc 文件以使常量起作用。

而且我不知道它为什么会抛出其他错误消息。

放弃经典 ASP 的充分理由 [仅当我的老板倾听时]

【讨论】:

    【解决方案3】:

    尝试在参数名称中删除“@”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多