Sql server ADODB命令中的参数分配问题

Sql server ADODB命令中的参数分配问题,sql-server,stored-procedures,vbscript,sql-server-2000,adodb,Sql Server,Stored Procedures,Vbscript,Sql Server 2000,Adodb,我们使用ADODB命令,使用SQLOLEDB驱动程序在SQL Server 2000数据库上执行查询(调用存储过程) 在我们的一台服务器上,分配参数值时出现问题。事情是这样的: Set conn = Server.CreateObject("ADODB.Connection") conn.CommandTimeout = 0 conn.ConnectionTimeout = 15 conn.Mode = 1 ' adModeRead conn.ConnectionString = connect

我们使用ADODB命令,使用SQLOLEDB驱动程序在SQL Server 2000数据库上执行查询(调用存储过程)

在我们的一台服务器上,分配参数值时出现问题。事情是这样的:

Set conn = Server.CreateObject("ADODB.Connection")
conn.CommandTimeout = 0
conn.ConnectionTimeout = 15
conn.Mode = 1 ' adModeRead
conn.ConnectionString = connectionString ' SQLOLEDB
conn.CursorLocation = 3 ' adUseClient
conn.Open

Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn ' previously created connection
cmd.CommandType = 4 ' adCmdStoredProc
cmd.CommandText = "dbo.StoredProcedureName"
cmd.CommandTimeout = 0
cmd.Parameters.Refresh ' Get the parameters info from the database

' Pseudo code here :
Foreach cmd.parameters
 cmd.parameters(index).value = somevalue
Next
这段代码实际上可以在我们的生产服务器上运行,但由于一些奇怪的原因,它不能在我们的开发服务器上运行,并生成以下错误:应用程序在为数据类型money参数指定值(包含小数部分,比如字符串“12.75”)时,为当前操作使用了错误类型的值

dev和prod上的代码完全相同。这是否与区域设置、ADODB语言、thr操作系统语言或其他Windows组件有关?因为这是经典的ASP代码,我们已经看过Session.LCID了,但是它们在两台服务器上都是相同的,所以我们现在还不清楚

你知道吗?

来自微软知识库

Parameters.refresh在某些情况下会失败或返回 不完全正确的信息。参数。刷新是 在ASP页面上使用时特别容易受到攻击

使用Parameters.refresh from Classic ASP时,存在有关参数方向的已知问题。MS指南是手动生成参数


是否可以使用不同的基本语言或其他区域设置设置开发服务器?仅为踢腿,请尝试指定值12,75,而不是12.75。

此错误通常是由于长度问题造成的。我建议您在创建参数时仔细检查使用的长度。长度不是问题,它是一个货币字段,在其他服务器上可以正常工作,如果它一直在一台服务器上工作,而不是在另一台服务器上工作,那么在发生故障的服务器上,ADODB事务可能有一些独特的和辅助的东西。鉴于这一事实,结合经典的ASP事务管道,我们不太可能处理代码问题…ASP或SQL StoredProc。我们无法改变这种行为,整个应用程序都使用它来调用存储过程。我还想更好地了解哪些情况会导致参数出现错误。刷新以正常工作?还有参数。刷新这似乎不是问题,因为参数实际上是刷新的,varchar值在任何地方都被分配为ok,并且存储的proc不包含货币或浮点值,工作正常。(以及其他服务器上的所有内容)您正在使用哪个MDAC?哪个版本的IIS?从概念上讲,我想你应该理解你在做什么,为什么要这么做,以及你说你不能改变它背后的理由。我的第一个建议是绝对确保服务器之间的环境完全相同……这意味着MDAC级别[甚至确保SQLOLEDB驱动程序的版本相同]。您暗示托管环境在语言、区域设置等方面可能存在一些差异。您能否提供有关这些差异范围的详细信息?另外,您的体系结构是什么?这是一个n层应用程序,其中多个web服务器与一个公共SQL server连接,还是我们讨论的是不同的应用程序实例以及不同的SQL server实例?没有特殊的体系结构,web服务器a(开发)上的ASP页直接连接到服务器B上的SQL server 2000。web服务器C连接到同一个SQL server实例。我们将研究MDAC、IIS的版本以及服务器和用户的区域设置和语言(如果有帮助的话)。我会通知您的。您是对的,当我更改逗号的点时,它工作得很好,但我非常确定它将在生产web服务器上失败。如果您更改设置使两者相同,则不会!