Evil 域

当Evil遇上先知

导航

ADO.NET Cafe(三)

Posted on 2007-06-17 09:39  Saar  阅读(270)  评论(1编辑  收藏  举报

  前两段Cafe烦乱扯了一下ADO.NET的不少东西,这次,我们从ADO.NET最基本的对象Connection开始,深入品味ADO.NET。
  当今许多编程是以数据库为中心的,而程序要与数据库交互,建立连接是第一步。没有数据库连接,对数据库的所有操作都只能是无稽之谈。那么,如何建立数据库连接呢?ADO.NET中,提供了SqlConnection类用于连接Microsoft SQL Server(下文简称MSSQL)数据库管理系统,提供了OracleConnection类用于连接Oracle数据库管理系统……下面以简单MSSQL示例来加以说明:
  首先,要使用相应的类来建立连接对象。

SqlConnection testConnection=new SqlConnection();


  一个语句完成连接对象的创建,很简单吧?呵呵,但光光建立Connection对象是不够的。因为您必须告诉程序连接到哪一个数据库、用户名是什么、密码是什么、安全性怎么处理等等。这一切,可以通过一个字符串来定义,它的名字叫做“连接字符串”——ConnectionString。
SqlConnection testConnection=new SqlConnection();
string testConnectionString="DataSource=(local); Initial Catalog=Test; Integrated Security=SSPI";
testConnection.ConnectionString=testConnectionString; //定义testConnection对象的ConnectionString属性
  有了这个连接字符串,就可以写代码访问安装在本地的数据库Test了。我们用以下代码,来看看它是否能够正常连接上。

try
{
 testConnection.Open();
 
if(testConnection.State==ConnectionState.Open)
  Response.Write(
"Successfully opened a connection!");
}

catch
{
 
if(testConnection.State!=ConnectionState.Open)
  Response.Write(
"Failed to open a connection!");
}

finally
{
 
if(testConnection.State==ConnectionState.Open)
  testConnection.Close();
 testConnection.Dispose();
}

  如果能够正常连接,则会在页面顶端显示“Successfully open a connection!”,否则,显示“Failed to open a connection!”。

Connection的使用就是这么简单。然而,最困扰新程序员的问题,大概就是ConnectionString的书写。为此,ADO.NET提供了一个SqlConnectionStringBuilder类,只要对它的属性进行合理的设置,就可以生成正确的连接字符串。下面,我们来看一个简单示例(以MSSQL为例)

SqlConnectionStringBuilder connstrBuilder = new SqlConnectionStringBuilder();
connstrBuilder.DataSource
="(local)";
connstrBuilder.InitialCatalog
="Test";
connstrBuilder.IntegratedSecurity
=true;
using(SqlConnection testConnection=new SqlConnection(connstrBuilder.ToString())
{
 
try
 
{
  testConnection.Open();
  
if(testConnection.State==ConnectionState.Open)
   Response.Write(
"Successfully opened a connection!");
 }

 
catch
 
{
  
if(testConnection.State!=ConnectionState.Open)
   Response.Write(
"Failed to open a connection!");
 }

 
finally
 
{
  
if(testConnection.State==ConnectionState.Open)
   testConnection.Close();
  testConnection.Dispose();
 }

}

  迄今为止,我们所做的事情都是把连接字符串写在代码里,其实,这不是一个好习惯。试想一下,如果数据库服务器进行了搬迁,那是不是每一个页面都需要进行一次修改?即使使用替换,我们能不能保证所有替换都正确进行,没有多换、没有漏换?呵呵,经验告诉我们,把它放到Web.config里去吧,这样,连接字符串只需要写一次,所有页面都从Web.config中读取此连接字符串,自然的,要修改数据库连接,也只需要改一处。
  要达到这样的效果,首先,要配置web.config文件:

<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
 
<connectionStrings>
  
<add name="testConnStr" providerName="System.Data.SqlClient" connectionString="DataSource=(local); Initial 

Catalog=Test; Integrated Security=SSPI"
/>
 
</connectionStrings>
 
<system.web>
 
 
</system.web>

</configuration>

  在页面中调用此连接字符串的方法也很简单,示例如下:

string testConnectionString=ConfigurationManager.ConnectionStrings["testConnStr"].ToString();

  呵呵,本次Cafe我们使用了SqlConnection类生成了相应的Connection对象,使用了SqlConnectionBuilder类生成了连接字符串,还使用了configurationManager的ConnectionStrings[]属性,从web.config中把连接字符串引用到了ASP.NET程序中。下次,我们将进一步深入Connection类,看看,在它背后,到底隐藏着什么。