(三)数据库连接——以编程方式访问数据库
1、 创建连接
SqlConnection conn = new SqlConnection();
conn.ConnectionStrings = “<connection string>”;
或者
SqlConnection conn = new SqlConnectioin(“<connection strng>”);
通常使用应用程序的配置文件(Windows和控件台应用程序是asp.config,web应用程序是web.config)。在配置文件中,连接字符串可以存储在任何位置,但有一个地方是为保存连接字符串而设计的,即<connectionStrings>元素。
Windows或控件台应用程序的配置文件例子:
<?xml version=”1.0” encoding=”utf-8”>
<configuration>
<connectionStrings>
<add name=”MyConnectionString” connectionString=”
Data Source=.\SQLEXPRESS;
AttachDbFilename=C:\C#DataBase\FolktaleDb.mdf;
Integrated Security=True;
Connect Timeout=30;
User Instance=True
/”>
</connectionStrings>
<configuration>
要在代码中访问这些信息,可用System.Configuration.ConfigurationManager类,该类包含在System.Configuration.dll库中。例如:
SqlConnection conn = new SqlConnection(ConfigurationManager.
ConnectionStrings[“MyConnectionString”].ConnectionString);
下面是一个web.config的例子:
<connectionStrings>
<add name="sqlACMConnString" connectionString="
Data Source=202.193.60.223\weisql05;
Initial Catalog=ACMOJ;
Persist Security Info=True;
User ID=myUserID ; Password=myPWD;
Max Pool Size = 512;"
providerName="System.Data.SqlClient"
/>
<add name="sqlURConnString" connectionString="
Data Source=202.193.60.223\weisql05;
Initial Catalog=UserRights;
Persist Security Info=True;
User ID=myUserID ; Password=myPWD;
Max Pool Size = 512;"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
2、 连接状态
数据库连接消耗资源,因此应只在代码使用数据库时才打开,否则应用程序可能引起内存泄漏,也可能阻止其他应用程序访问数据库。连接状态可以通过SqlConnection.State属性来判断。
使用SqlConnection.Open()打开连接,使用完连接时可用SqlConnection.Close()方法关闭它。注意:连接不会自动关闭,必须手工关闭。
另外,可以通过数据阅读器关闭连接,或使用using 块以便自动关闭连接:
Using (SqlConnection conn=new SqlConnection(
Configurationmanager.ConnectionStrings[“MyConnectionstring”].ConnectionString))
{
conn.Open();
…
}
另一个常用方法是使用try…catch…finally结构来关闭连接:
Try
{
conn.Open () ;
}
catch( Exception ex )
{
//Handle exception.
}
Finally
{
conn.Close();
}
3、 连接池
一种数据库连接的缓冲机制。提供程序维护很多与数据库的连接,当代码请求时可以使用这些连接。代码关闭连接时,连接池中的真正连接并不关闭,该连接只是被释放,并保持打开状态,供随后的代码使用。SQL Server 提供程序默认启用连接池,一个连接池最多支持100个并发连接。
通过修改连接字符串或以编程方式对提供程序进行操作,可以控制连接池。