gpt4 book ai didi

vbscript - 对 asp 中的参数化 SQL 语句进行故障排除

转载 作者:行者123 更新时间:2023-12-02 21:47:14 25 4
gpt4 key购买 nike

我正在尝试保护一些用我猜是 VB 或 asp 编写的遗留代码(不太确定是否有区别)。当我尝试执行该语句时,页面出现内部服务器错误。我确信这是连接的结果,但我不太了解该语言,不知道如何解决它。

我对该语言和 ADODB 库的了解来自 W3Schools documentationthis post .

这是我编写的代码(已编辑的标识信息)

SET Conn=server.CreateObject("adodb.connection")
Conn.Open "Provider=sqloledb;SERVER=I;DATABASE=Hate;UID=My;PWD=Life;"

SET countCmd = createobject("adodb.command")
countCmd.ActiveConnection = Conn
countCmd.commandText = "SELECT COUNT(*) FROM [table1] WHERE FY=@fy"

countCmd.Parameters.Append countCmd.createparameter("@fy", 200, 1, 255, fy)
SET pcount = countCmd.Execute() 'This is where the error happens

我的最终目标不仅仅是从这个表中获取计数,而是充分理解 adodb 库,以便我可以继续参数化这个遗留代码库中需要它的所有查询。

我感谢任何帮助,并希望得到详细的解释。

编辑

我希望我能接受这两个答案作为已接受的答案,因为我认为它们一起是完美的答案。我最终使用了两者,所以支持这些人。

最佳答案

当使用CommandType时的adCmdText ADODB 期望的占位符是 ?并尝试传递命名参数,如 @fyCommandText将失败。这是 ADODB 中的一个不幸的失败

countCmd.NamedParameters = True

仅适用于 CommandTypeadCmdStoredProc并且仅与某些提供商合作。

但是,对于 SQL Server(可能还有其他提供程序,具体取决于它们支持的内容)有一个简单的解决方法,即在 CommandText 中构建命名参数。像这样;

countCmd.commandText = _
"DECLARE @fy AS VARCHAR(255);" & vbCrLf & _
"SET @fy = ?;" & vbCrLf & _
"SELECT COUNT(*) FROM [table1] WHERE FY=@fy;"
<小时/>

有用的链接

关于vbscript - 对 asp 中的参数化 SQL 语句进行故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38295787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com