error|server When I started developing web pages that interact with a SQL Server database, I probably started like everbody else: with inline SQL statements. I then progressed to using the connection object to call stored procedures and eventually started using the command object. I eventually realized how useful return values from stored procedures could be, since I could use them to return a value based on a potential error condition that I check for in the stored procedure.
Recently, I was developing an online catalog and had a situation to deal with:
User enters data into a form
Need to insert the data into a SQL Server database after checking to make sure various conditions don't exist. For example, the user could enter a product, but only if the product doesn't already exist in the catalog. That's not something that's easily accomplished with client-side validation!
Initially I decided upon a fairly popular route: create a form in Page1.asp that submits to Page2.asp which attempts to insert the user-entered information into the database. If the product already exists, go back to Page1.asp, displaying a message and populating the fields with what the user entered. While this is a possible approach, trust me when I say that it's a pain to code if you have a lot of form fields! Ideally I wanted a pop-up message that I could customize based on the condition found in the stored procedure. (I like pop-ups because by their nature, they draw more attention than a message displayed on a page.) Also, I wanted the user taken back to Page1.asp with all of his/her entries already filled in.
Here is an example stored procedure that returns an error result if something goes awry:
Create Procedure [Proc_InsertProduct]
@productname varchar(50) = null,
@price money = null
if exists(select productname from tblProducts where productname = @productname)
insert into tblproducts (productname, price)
values (@productname, @price)
A simple sample stored procedure that checks to see if the product already exists. If so, it returns 55555, otherwise it inserts the product and returns the error code (which will 0 if successful). Now, on the ASP side, I use the command object to send the form contents to the stored procedure. The stored procedure's return value is always the first item in the parameters collection of the command object (cmd.parameters(0)) after the command object's Execute method has been called in this case.
response.buffer = true
response.exires = -1441
dim connect, cmd, returnvalue
set connect = server.createobject("adodb.connection")
set cmd = server.createobject("adodb.command")
set cmd.activeconnection = connect
cmd.commandtype = 4 'sp (I know, magic numbers, but add a comment and there you go)
cmd.commandtext = "Proc_InsertProduct"
cmd.parameters(1) = request.form("productname")
cmd.parameters(2) = request.form("price")
returnvalue = cmd.parameters(0)
'Did an error occur?
if returnvalue <> 0
'Some sort of error occurred
set cmd = nothing
set connect = nothing
dim title, message
select case errorcode