Using ADO.NET with SQL Server and Access
As a developer, I find that an incredible amount of my time is spent dealing with databases in some form or another - be it displaying, manipulating or analyzing data; creating client or server applications. The advent of the .NET Framework has brought with it some major changes, and database access is certainly no exception. Although ADO has been around since 1996, with the arrival of ASP, its latest incarnation present in the .NET Framework - ADO.NET - really does represent its coming-of-age. This new architecture is so extensive, that I can only hope to give you a brief introduction. Although the article is using the SQL server data access components, much applies equally as well to using Microsoft Access. We'll be covering connecting to a SQL Server database, executing queries, calling stored procedures, filtering data, and reflecting changes in a database - and point you in the direction of further resources for more in-depth discussions on particular topics. I've provided code in both VB and C# if there are any major syntatical differences, and the rest in C#.
If you've got any comments, or if I've made any stupid mistakes, then feel free to drop me a line!
Connecting to the database
In order to use ADO.NET, we'll need to import two namespaces:
[VB]
Imports System.Data
Imports System.Data.SqlClient
[C#]
using System.Data;
using System.Data.SqlClient;
In order to establish a connection with SQL Server, we use the SqlConnection
object. There are also generic OleDbConnection
and OdbcConnection
objects present in the System.Data.OleDb
and System.Data.Odbc
namespaces for use with other data sources such as Access (NB: support for ODBC was added in .NET 1.1). This would work in exactly the same way as illustrated here, but as Microsoft were kind enough to provide a data access class specifically optimized for SQL server, we might as well take advantage of it! If you're using Access, then you can literally replace every occurence of SqlSomething
with OleDbSomething
.
Opening a connection is very simple:
[VB]
' create a new SqlConnection object with the appropriate connection string
Dim sqlConn As New SqlConnection(connectionString) 'OleDbConnection i
' open the connection
sqlConn.Open()
// do some operations here...
// close the connection
sqlConn.Close()
[C#]
// create a new SqlConnection object with the appropriate connection string
SqlConnection sqlConn = new SqlConnection(connectionString)
// open the connection
sqlConn.Open();
// do some operations ...
// close the connection
sqlConn.Close();
with the connection string usually taking this form:
server=serverAddress;uid=username;pwd=password;database=database;
It is probably worth noting at this stage something about connection pooling. The idea behind connection pooling is simple - instead of incurring a large amount of overhead each time a connection to database server is established and closed, once a connection has been opened, it remains open for the lifetime of the process, available to be used again if needed. Pooling database connections can significantly enhance the performance and scalability of your application. The .NET data providers automatically pool connections for you. However, to take maximum advantage of these, you should take note of the following:
- Connections are only pooled if they have the same connection string; so ensure this is always constant.
- When finished with a
SqlConnection
object, callDispose()
orClose()
to release the connection back to the pool. - In order to keep the maximum number of connections available, you should keep connections open for a short as period as possible - remembering that thanks to connection pooling, re-opening a database connection will incur little overhead.
For more information on connection pooling, take a look at this MSDN page.
Once open, you can't do much with a SqlConnection
object on its own - other than close the connection again, and query its connection status using the ConnectionState
property, so we'll move on to how we go about querying the database.
Comments