9

Can someone show me the simplest way of perform a parametrized SQL query using Classic ASP in VBscript?

A compilable example would be best.

2
  • 1
    Are you referring to a parameterized SQL query? Commented Apr 20, 2009 at 22:59
  • yes. going to update the question to clarify. thanks! Commented Apr 20, 2009 at 23:06

3 Answers 3

14

Use the adodb.command object.

with createobject("adodb.command") .activeConnection = application("connectionstring") .commandText = "select * from sometable where id=?" set rs = .execute( ,array(123)) end with 

I would also advise to use a custom db access object instead of using adodb directly. This allows you to build a nicer api, improves testability and add hooks for debuging/logging/profiling. Secondly you can add request scoped transactions with implicit rollback's on errors using the class_terminiate event. Oure db access object offers the following query api

call db.execute("update some_table set column=? where id=?", array(value, id)) set rs = db.fetch_rs("select * from some_table where id=?", array(id)) count = db.fetch_scalar("select count(*) from some_table where column > ?", array(value)) 
Sign up to request clarification or add additional context in comments.

3 Comments

very elegant and minimal vbscript - I like it!
This doesn't work if the column is numeric and the value is null. Is there a way for this to work without using ADODB.Command.CreateParameter?
It will work if you call objCommand.Parameters.Refresh after setting the CommandText property. Empty elements in the array have to be replaced with Null.
11

I'm assuming you are referring to a parameterized SQL Query. If this is the case, then the VBScript code would look something like this:

Set adoCon = Server.CreateObject("ADODB.Connection") adoCon.Open "connectionstring" SET cmd = Server.CreateObject("ADODB.Command") cmd.ActiveConnection = adoCon cmd.CommandType= adCmdStoredProc cmd.CommandText = "GetCustomerByFirstName" cmd.Parameters.Append cmd.CreateParameter("@FirstName",adVarchar,adParamInput,50,"John") Set Rec = cmd.Execute() While NOT Rec.EOF 'code to iterate through the recordset Rec.MoveNext End While 

UPDATE: You need to include the ADOVBS.inc file for the constants to be recognized.

Here's a link: ADOVBS.inc

3 Comments

do I need to include some file to get ASP to recognize adVarchar and adParamInput constants?
Yes. Here's a link to that file asp101.com/articles/john/adovbs/adovbs.inc.txt
This suggesstion was very helpful in stored procedures scenario
8

Another option to including adovbs.inc is to add a reference to the following type library near the top of your ASP. Supposedly this has better performance than an include:

<!--METADATA TYPE="TypeLib" NAME="ADODB Type Library" UUID="00000205-0000-0010-8000-00AA006D2EA4" FILE="C:\Program Files\Common Files\System\ado\msado15.dll" VERSION="2.5" --> 

Here is a list of some type libraries.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.