我正在编写一些返回单个值的简单查询,并且我想从Classic ASP的ADO库中获取ADO.NET ExecuteScalar方法的行为。但是,我宁愿不重新发明轮子。是否可以在经典ASP中实例化ADO.NET的Command对象?如果是这样,我将如何做到这一点?
如果我确实需要重新实现此功能,那么最好的方法是什么?
这是我正在尝试做的事情(在VBScript中):
set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = conn
cmd.CommandText = "SELECT COUNT(*) FROM corp_crcchallenge WHERE cc_email = ?"
appendParam cmd, "email", adVarChar, adParamInput, 255, email
emailFound = cmd.ExecuteScalar()
appendParam是我用来附加param的子程序,所以我不必在这个应用程序的另一部分重复太多。它使阅读起来更容易一些。
如果我需要重新实施,我认为下面的内容可能是正确的方向。 (再次VBScript)
emailFound = cmd.Execute(Nothing, Nothing, adExecuteRecord)
答案 0 :(得分:2)
命令对象将数据作为记录集返回。您可以从记录集字段中获取值。在此示例中,我使用了已定义的字段名称“MyCount”。如果你想要更通用的,你可以在最后一行得到rs.fields(0)的值。
快速示例:
set cmd = Server.CreateObject("ADODB.Command")
set rs = server.createObject("ADODB.RecordSet")
with cmd
.ActiveConnection = conn
.CommandText = "SELECT COUNT(*) as MyCount FROM corp_crcchallenge WHERE cc_email = @p1"
.createparameter("@p1",adVArChar,adParamInput,,email)
set rs = .Execute
end with
rtn = rs.fields("MyCount")
可重复使用的功能示例:
n = MyScalar("SELECT COUNT(*) FROM corp_crcchallenge WHERE cc_email = @p1","abc@def.com")
function MyScalar(sql, Param1)
set cmd = Server.CreateObject("ADODB.Command")
set rs = server.createObject("ADODB.RecordSet")
with cmd
.ActiveConnection = conn
.CommandText = sql
.createparameter("@p1",adVArChar,adParamInput,,Param1)
set rs = .Execute
end with
MyScalar = rs.fields(0)
end function