我们使用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
此代码实际上适用于我们的生产服务器,但由于某些奇怪的原因,它在我们的开发服务器上不起作用并产生此错误:应用程序使用错误类型的值进行当前操作我们为一个数据类型货币参数赋值(包含一个小数部分,比如像“12.75”这样的字符串)。
代码在dev和prod上完全相同。这可能与区域设置,ADODB语言,thr OS语言或其他一些Windows组件有关吗?因为它是经典的ASP代码,所以我们已经看过Session.LCID,但它们在两台服务器上是相同的,所以我们现在一无所知。
有什么想法吗?
答案 0 :(得分:2)
是否可以使用不同的基本语言或其他区域设置设置开发服务器?只是为了踢,尝试分配值12,75而不是12.75。
答案 1 :(得分:1)
来自MS KB
在某些情况下,Parameters.refresh会失败或返回 信息不完全正确。 Parameters.refresh是 在ASP页面上使用时特别容易受到攻击。
使用Classic ASP中的Parameters.refresh时,存在与参数方向有关的已知问题。 MS指导是手动生成参数。
http://support.microsoft.com/kb/183008 http://support.microsoft.com/kb/174223