定义用于执行存储过程的参数-经典ASP

学习...

我正在尝试更新一些旧功能。有一个具有一个输入参数和两个输出参数的存储过程。尝试执行代码时出现以下错误:

Microsoft OLE DB提供程序的ODBC驱动程序错误'80040e21'

多步OLE DB操作生成错误。检查每个OLE DB状态值(如果有)。没有工作。

/student.asp,第30行

存储过程:

ALTER PROCEDURE [Api].[GetKeyByAuthId]
    @AuthenticationId uniqueidentifier
,   @Key int = NULL OUTPUT
,   @type varchar(25) = NULL OUTPUT

直接通话效果很好:

USE [Development]
GO

DECLARE @return_value int,
        @Key int,
        @type varchar(25)

EXEC    @return_value = [Api].[GetKeyByAuthId]
        @AuthenticationId = '0550F579-DBDA-4C41-82B3-453841A6232E',
        @Key = @Key OUTPUT,
        @type = @type OUTPUT

SELECT  @Key as N'@Key',
        @type as N'@type'

SELECT  'Return Value' = @return_value

GO

身份验证ID是唯一的标识符,并通过页面上的查询字符串接收。这是我的代码,第30行是cmd.Execute:

var cmd = Server.CreateObject("ADODB.Command");
cmd.CommandText = "Api.GetKeyByAuthId";
cmd.CommandType = 4;   // Stored procedure


var p = cmd.Parameters;
p.Append(cmd.CreateParameter("@AuthenticationId", 72, 1));
p.Append(cmd.CreateParameter("@Key", 3, 2, 9));
p.Append(cmd.CreateParameter("@type", 200, 2, 25));

cmd("@AuthenticationId") = aid;

cmd.ActiveConnection = Conn;
cmd.Execute();

Key = cmd.Parameters("@Key");
type = cmd.Parameters("@type");
用户名

评论中讨论了数据类型之后

您提到存储过程期望@Key为,Int但该字段的基础表数据类型为BigInt

警告

这种方法的问题在于,从BigInt的转换Int非常危险(请参阅SQL-安全地将BIGINT向下转换为INT)。大多数时候你会得到

Msg 8115, Level 16, State 2, Line 5
Arithmetic overflow error converting expression to data type int.

您可以使用以下组合来抑制异常

SET ANSI_WARNINGS OFF -- Divide-by-zero and arithmetic overflow errors cause null values to be returned
SET ARITHABORT OFF    -- Don't terminate the query on Divide-by-zero and arithmetic overflow errors
SET ARITHIGNORE ON    -- Suppress errors from Divide-by-zero and arithmetic overflow errors

我的猜测是

多步OLE DB操作生成错误

存储过程中的错误是由引起的,Arithetic overflow error因为您要检索的值@Key太大而无法容纳Int数据类型。

如果可能,我将与您的开发人员联系并解释情况,然后查看是否可以将存储过程修改为@Keyas BigInt

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

经典ASP格式日期

来自分类Dev

ASMX webserive无法从经典的ASP soap请求中接收参数。

来自分类Dev

经典ASP-自定义错误页面

来自分类Dev

调用存储过程,返回值,经典ASP我缺少什么?

来自分类Dev

经典ASP-ADO执行存储过程中传入的参数

来自分类Dev

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

来自分类Dev

经典ASP代码迁移

来自分类Dev

自定义经典ASP 404页面,读取querystring的第一个变量时出错

来自分类Dev

在经典ASP中拆分Date()

来自分类Dev

下载Excel文件经典ASP

来自分类Dev

使用经典ASP导出CSV

来自分类Dev

从经典ASP调用具有二进制数据类型输入参数的SQL Server存储过程

来自分类Dev

显示当前目录-经典ASP

来自分类Dev

ASP经典执行和错误C0000005

来自分类Dev

经典ASP使用OraOleadb驱动程序调用Oracle存储过程

来自分类Dev

在经典ASP中向AJAX添加参数

来自分类Dev

cdo.message.send之后的代码无法在经典ASP中执行

来自分类Dev

在经典ASP中使用oracle date参数调用oracle函数

来自分类Dev

带SQL的ASP经典-没有为一个或多个参数提供值

来自分类Dev

ASP经典CDOSYS

来自分类Dev

经典ASP-哪些用户需要为存储过程授予的执行权限

来自分类Dev

经典ASP TouchActionButton

来自分类Dev

通过自定义错误页面的ASP经典友好URL

来自分类Dev

经典ASP使用OraOleadb驱动程序调用Oracle存储过程

来自分类Dev

经典ASP:如果字典具有用于值的类Items,如何对字典进行排序

来自分类Dev

使用对称密钥加密时,经典的ASP参数化查询无法正常工作

来自分类Dev

ADODB CommandTimeout在经典ASP中执行存储过程

来自分类Dev

经典 ASP 错误变量未定义

来自分类Dev

将记录集值添加到存储过程参数 - 经典 ASP

Related 相关文章

热门标签

归档