Je souhaite simplement récupérer un seul enregistrement d'une base de données dans une page ASP classique. Le code ci-dessous fonctionne essentiellement, mais il y a quelques problèmes que j'ai besoin d'aide pour résoudre:Requête simple avec ADO et ASP classique
1) Je veux voir si un enregistrement a été retourné ou non. result
n'est pas Nothing, donc la redirection en bas n'est jamais effectuée. contact.RecordCount
renvoie toujours -1, donc je ne peux apparemment pas utiliser cela non plus. Bizarrement, essayer d'accéder à RecordCount en dehors de la fonction lance une erreur "L'objet ne supporte pas cette propriété ou méthode: 'RecordCount'".
2) J'ai lu des requêtes déconnectées et j'ai vu des exemples où la connexion et la commande sont fermées et/ou définies sur Nothing à la fin de la fonction. Existe-t-il une meilleure pratique définitive sur ce que je devrais faire?
3) L'utilisation d'une requête paramétrée me protège-t-elle complètement de l'injection SQL ou dois-je supprimer manuellement les mots et les caractères dangereux?
function GetContactByUsername(username)
Dim conn, command, param, contact
set conn = server.CreateObject("adodb.connection")
conn.Open Application("DatabaseConnectionString")
Set command = Server.CreateObject("ADODB.COMMAND")
set command.ActiveConnection = conn
command.CommandType = adCmdText
command.CommandText = "Select * from MY_DATABASE.dbo.Contact where Username = ?"
Set param = command.CreateParameter ("Username", adVarWChar, adParamInput, 50)
param.value = username
command.Parameters.Append param
Set contact = Server.CreateObject("ADODB.RECORDSET")
contact.Open command
Response.Write contact.RecordCount '' always -1
set GetContactByPurlCode = contact
end function
dim result
result = GetContactByUsername(Request.QueryString("username"))
if result is Nothing then '' never true
Response.Redirect "/notfound.asp"
end if
FirstName = Trim(result("FirstName"))
LastName = Trim(result("LastName "))