2010-09-13 17 views
1

J'écris des requêtes simples qui renvoient une seule valeur et j'aimerais obtenir le comportement de la méthode ADO.NET ExecuteScalar à partir de la bibliothèque ADO de Classic ASP. Cependant, je préférerais ne pas réinventer la roue. Est-il possible d'instancier l'objet de commande ADO.NET dans ASP classique? Si oui, comment ferais-je cela?Utiliser ADO.NET dans le script ASP classique

Si j'ai besoin de ré-implémenter cette fonctionnalité, quelle est la meilleure façon de le faire?

Voici ce que je suis en train de faire (en 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 est un sous-programme que j'ai fait ajouter le param donc je ne voudrais pas me répéter trop dans une autre partie de cette app. Cela le rend un peu plus facile à lire.

Je pense que quelque chose comme ce qui suit pourrait être la bonne direction si j'ai besoin de ré-implémenter. (Encore une fois VBScript)

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

Répondre

2

L'objet de commande renvoie des données en tant que jeu d'enregistrements. Vous pouvez obtenir la valeur à partir du champ recordsets. Dans cet exemple, j'ai utilisé un nom de champ défini de "MyCount". Si vous voulez un plus générique, vous pouvez simplement obtenir la valeur de rs.fields (0) dans la dernière ligne.

rapide Exemple:

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") 

Exemple de fonction réutilisable:

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

Merci, je fini par arriver à cette solution sur moi-même. (après avoir posté la question) Mais j'espérais vraiment que je pourrais juste faire un 'Server.CreateObject (" ADODOTNET.Command ")' ou quelque chose et avoir la meilleure API avec laquelle travailler. Quelqu'un peut-il m'expliquer pourquoi je ne peux pas? – sholsinger

+0

Vous pouvez, voir ici: http://dskc.wordpress.com/2007/12/06/calling-net-component-from-a-classic-asp-page/ et ici: http: //weblogs.asp. net/dneimke/archive/2004/01/31/65330.aspx – bugtussle

+1

son appelé "Com interop" http://msdn.microsoft.com/fr-fr/library/kew41ycz%28VS.71%29.aspx – bugtussle