従来のASPページのデータベースから単一のレコードを取得するだけです。以下のコードは基本的に動作しますが、私は解決策が必要ないくつかの問題があります。ADOと従来のASPを使用した単純なクエリ
1)レコードが返されたかどうかを確認したい。 result
はNothingではないため、一番下のリダイレクトは実行されません。 contact.RecordCount
は常に-1を返しますので、私はそれを使うことはできません。奇妙なことに、関数の外でRecordCountにアクセスしようとすると、「オブジェクトはこのプロパティまたはメソッドをサポートしていません: 'RecordCount'」というエラーがスローされます。
2)私は、切断されたクエリについて読んだことがあり、関数の最後に接続とコマンドが閉じていて、そして/またはNothingに設定されている例を見てきました。私は何をすべきかについて決定的なベストプラクティスがありますか?
3)SQLインジェクションから私を完全に保護するパラメータ化されたクエリを使用するか、危険な単語や文字を手動で削除する必要がありますか?
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 "))