2010-09-13 80 views
1

我在写一些简单的查询,它返回一个单一的值,我想从经典ASP的ADO库中获取ADO.NET ExecuteScalar方法的行为。但是,我宁愿不重新发明轮子。是否有可能在传统ASP中实例化ADO.NET的Command对象?如果是这样,我该怎么做呢?在经典ASP脚本中利用ADO.NET

如果我确实需要重新实现此功能,那么最好的方法是什么?

这里就是我想要做的(在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是一个子程序我提出追加帕拉姆这样我就不必重复自己在这另一部分太多应用程序。它使它更容易阅读。

我在想如果我需要重新实现,像下面这样的东西可能是正确的方向。 (再次VBScript)

emailFound = cmd.Execute(Nothing, Nothing, adExecuteRecord) 

回答

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","[email protected]") 

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 
+0

谢谢,我结束了在我自己的这种解决办法到达。 (发布后的问题)但我真的希望我可以做一个'Server.CreateObject(“ADODOTNET.Command”)'或什么,并有更好的API来处理。任何人都可以向我解释为什么我不能? – sholsinger 2010-09-13 20:58:46

+0

你可以看到这里:http://dskc.wordpress.com/2007/12/06/calling-net-component-from-a-classic-asp-page/和这里:http://weblogs.asp。 net/dneimke/archive/2004/01/31/65330.aspx – bugtussle 2010-09-13 22:03:39

+1

它称为“Com interop”http://msdn.microsoft.com/en-us/library/kew41ycz%28VS.71%29.aspx – bugtussle 2010-09-13 22:09:54