Basic ADO and SQL Tutorial
page 4 of 5
by Steven Smith
Feedback
Average Rating: This article has not yet been rated.
Views (Total / Last 10 Days): 58222/ 298

Recordset Object

The Recordset object is the primary object you will work with when you are accessing data using ASP and ADO. A Recordset is essentially a database cursor, which you can page through to view each row of a query or table. To begin with, we'll declare our recordset:

 'Create Recordset Object
 Dim objRst   'Create Recordset Variable
 Set objRst = Server.CreateObject("ADODB.Recordset")
 Set objRst.ActiveConnection = objConnect
 Set objRst.Source = objCmd

Note that our Recordset references our connection objConnect and our Command object, objCmd. This is the minimal requirements for a recordset that uses the command object. You can get away with fewer parameters when declaring your recordset, if you opt not to use the Command object(in fact there are a few different ways to set up your recordset), but I won't cover them here. You should understand two additional parameters for your recordset which can affect how your query performs. They are the CursorType and LockType properties. Each of these has 4 possible values. The default values give you a Read-Only, Forward-Only recordset. For the operations we will be performing in this tutorial, the default options are ideal. If you choose to use the Recordset object instead of the Command object for your updates and inserts, you will need to become more familiar with the Cursor and Lock types. Here is an excerpt from the adovbs.inc file, listing the cursor and locktypes:

 '---- CursorTypeEnum Values ----
 Const adOpenForwardOnly = 0
 Const adOpenKeyset = 1
 Const adOpenDynamic = 2
 Const adOpenStatic = 3

 '---- LockTypeEnum Values ----
 Const adLockReadOnly = 1
 Const adLockPessimistic = 2
 Const adLockOptimistic = 3
 Const adLockBatchOptimistic = 4

Note that Cursor is 0 to 3 and Lock is 1 to 4. Don't ask me why Microsoft did it this way. To set these properties, you would use code like:

 'Set Locktype and Cursortype
 Set objRst.Locktype = adLockReadOnly
 Set objRst.Cursortype = adOpenForwardOnly

Now that we've managed to declare all of our necessary objects, we're finally ready to access some data. The first thing you need to do is test out an SQL query to make sure it returns some results from your database. A simple "SELECT * FROM TableName" will suffice. Use your query for the CommandText in the following piece of code, with a valid column name in place of "field":

 objCmd.CommandText = "SELECT * " & _
  " FROM mytable " 
 objRst.Open
 If Not objRst.EOF Then
  Response.Write(objRst("field"))
 End If
 objRst.Close

When you execute this SQL query, it will print the first record's "field" value. If no values exist, it will do nothing. If you do not test for EOF before attempting to access recordset values, you will generate a run-time error (when you reach EOF). Always test for EOF before attempting to access your recordset. Note that I immediately close the recordset. Get in the habit of closing your recordsets as soon as you are finished using them, especially within loops. If you attempt to open a recordset that is already open, you will generate a run-time error.

Update: If you loop through a recordset, make sure you call objRst.MoveNext within your While Not objRst.EOF loop.  Otherwise you'll enter an infinite loop.  This is an extremely common mistake.  Also, avoid looping through recordsets.  A much faster technique is to use GetRows, which will return the results in an array.  Here's some more info on GetRows.

So far we haven't done anything that required the use of the command object, although it is a nice debug tool to be able to write out the CommandText property to check your SQL. The next example demonstrates why the Command object works better than the ADO recordset object for manipulating the data in your database.

 objCmd.CommandText = "UPDATE mytable SET " & _
  " field = 'Somevalue'" & _
  " WHERE field = 'Some Other Value' "
 objRst.Open

Note that for this Command, you do not need to close your recordset. This command uses your database's own UPDATE routine, which will almost always be far faster than using ASP's ADO Recordset object to perform your update. Ideally, you should move all critical database calls to stored procedures on your database server, but the above method is almost as efficient.  Similarly, you can perform the following statements using your database:

 objCmd.CommandText = "DELETE FROM mytable " & _
  " WHERE field = 'Some Other Value' "
 objRst.Open
 objCmd.CommandText = "INSERT INTO mytable " & _
  " (field1,field2) " & _
  " VALUES ("this value","this other value") "
 objRst.Open

Note once again that I didn't have to close the recordsets between operations, because they do not result in any data being sent to the recordset. You only need to worry about closing your recordset/command object combination when you are performing SELECT statements.

Update: You really really really should use stored procedures for your database access, for security reasons as well as performance.  Using SQL in your page comprised of strings concatenated together opens up your code to SQL Injection Attacks.


View Entire Article

Article Feedback

Title:  
Name:  
Url: ( Optional )
Comment:  
Please add 1 and 1 and type the answer here:

User Comments

Title: Hi   
Name: Prashanth
Date: 4/6/2009 8:16:46 AM
Comment:
It was very useful for giving some good information on ADO for the beginners
Title: nbp   
Name: www
Date: 5/17/2008 3:32:07 PM
Comment:
query of searching data in sqlserver with use of asp.net
Title: swd   
Name: www
Date: 4/29/2008 6:06:09 AM
Comment:
sweet.............
Title: Hi...   
Name: Hann
Date: 3/20/2007 9:49:00 AM
Comment:
Can U tell me how to connect MDB file in other host..?

Plizz, Send your reply to
hann21@linuxmail.org


Thanx
Title: hi   
Name: Paapu
Date: 1/23/2007 1:51:19 AM
Comment:
Its very useful, but still u can add some details also..
Title: hll   
Name: pat
Date: 11/17/2006 5:45:08 AM
Comment:
hello thanks a bunch but i guess i need more help
Title: DotNetSpace   
Name: Simple way to handle exception in database connections
Date: 10/26/2006 1:59:35 PM
Comment:
This is a simple way to handle exceptions when using database queries. This link includes an example:

http://www.dotnetspace.com/index.php?option=com_content&task=view&id=19&Itemid=26
Title: DotNetSpace   
Name: DotNetSpace query database connection example
Date: 10/26/2006 1:58:44 PM
Comment:
Shows a simple way to handle exceptions when using database queries. This link includes the example.
Title: use of loks in asp   
Name: praveen
Date: 7/11/2006 9:56:53 AM
Comment:
Hi

Please provide me the information about locks.
Title: asp stuff   
Name: dhvanil
Date: 4/6/2006 10:12:35 AM
Comment:
hi
your site is good
put some examples of every methods
Title: webmaster   
Name: Yusef Jeffries-El
Date: 1/15/2006 1:10:43 AM
Comment:
I just needed a quick reference to the syntax of the INSERT INTO statement using Visual Basic
Title: hi   
Name: vishal
Date: 6/3/2005 10:17:27 AM
Comment:
vishal patel your site is so genious but add the download button on every page






Community Advice: ASP | SQL | XML | Regular Expressions | Windows


©Copyright 1998-2009 ASPAlliance.com  |  Page Processed at 11/8/2009 12:39:22 AM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search