Asp classic ASP经典及;SQL Server 2014十进制类型作为存储过程的参数

Asp classic ASP经典及;SQL Server 2014十进制类型作为存储过程的参数,asp-classic,odbc,decimal,sql-server-2014,Asp Classic,Odbc,Decimal,Sql Server 2014,我正在使用一个旧的ASP经典网站,该网站最近从SQL Server 2005发展到2014年,我似乎无法将变量作为小数传递进来 我已经将我正在使用的内容分解为一个测试过程,该过程接受一个十进制(4,2),并返回一个varchar转换(实际存储过程做更多工作) decimalV在本例中为14.5 Const AdNumeric=131 常量AdParamInput=&H0001 回答。写(“小数:&decimalV&“”) oCmd.Parameters.Append=oCmd.CreatePar

我正在使用一个旧的ASP经典网站,该网站最近从SQL Server 2005发展到2014年,我似乎无法将变量作为小数传递进来

我已经将我正在使用的内容分解为一个测试过程,该过程接受一个
十进制(4,2)
,并返回一个
varchar
转换(实际存储过程做更多工作)

decimalV
在本例中为
14.5

Const AdNumeric=131
常量AdParamInput=&H0001
回答。写(“小数:&decimalV&“
”) oCmd.Parameters.Append=oCmd.CreateParameter(“@test”,AdNumeric,adParamInput,,decimalV) oCmd.参数(“@test”)。精度=2 oCmd.参数(“@test”)。数值刻度=4 oCmd.Parameters.Append=oCmd.CreateParameter(“@varcharBack”,AdVarChar,AdParamOutput,40)
我的理解是精度是小数位数,
NumericScale
是位数

我得到输出:

decimalV: 14,5
任何反馈都将不胜感激。

我无法更改连接字符串,因此最终通过向存储过程中传递一个double(在客户端验证之后),然后将浮点值转换为十进制(4,2)来解决此问题。

嗯,我怀疑这更像是一个odbc问题,而不是sql server问题。这可能会让你有所收获。谢谢你换了贴上的标签。我将在odbc上使用google。如果您使用的是旧的提供程序,请切换到使用SQL Server本机客户端。虽然上面没有SQL Server 2014示例,但它应该与没有任何不同。只是“SQL Server 2014安装SQL Server 2012本机客户端。没有SQL Server 2014本机客户端”,所以我上面的链接应该会有所帮助。此外,在将数据类型从SQL Server映射到ADODB时,我一直使用这一非常有用的资源。如果指定的是
DECIMAL(4,2)
,则应使用
adNumeric
作为
CreateParameter()
方法中的数据类型。特别是当您切换到使用SQL Server本机客户端时。 Microsoft OLE DB Provider for ODBC Drivers error '80040e21' Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.