1. 使用数据提供程序(Providers)移动数据
.NET默认包含的数据提供程序有以下4种:
- OleDb
- odbc
- SQL Server
- Oracle
除此之外还可使用第三方数据提供程序,如Mysql和DB2等。数据提供程序的主要功能为在本地程序和远程数据源(Data Store)之间移动数据。
2.DbConnection对象
要获取数据,首先要有一个合法可用的数据链接(Connection),数据链接的抽象类为DbConnection,再由数据提供程序的不同继承生成对应的具体数据链接类,如SqlConnection(Sql Server), MySqlConnection(MySql)等。打开/关闭一个链接的示例代码如下(SQL SERVER):
3. ConnectionString属性
设置ConnectionString属性是建立链接最难的一个环节,还好我们有VS工具等可以很直观的生成链接字符串。设置好链接字符串后,我们一般需将其保存在本地计算机中,这样即使链接字符串出现变化,我们也不必再次编译程序。在示例程序中,App.config文件中即包含了链接字符串内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="TestApp.Properties.Settings.toucaiConnectionString"
connectionString="server=mytoucai.mysql.rds.aliyuncs.com;user id=lqs2011;password = gdz840928;persistsecurityinfo=True;database=toucai"
providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
</configuration>
从文件中读取链接字符串并打开链接的示例代码如下:
using System.Configuration;
static void Main()
{
var conString = ConfigurationManager.ConnectionStrings["TestApp.Properties.Settings.toucaiConnectionString"].ConnectionString;
var conn = new MySqlConnection(conString);
var cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select count(*) from product";
conn.Open();
long count = (long)cmd.ExecuteScalar();
Console.WriteLine("共有" + count + "条商品条记录");
conn.Close();
}
这段代码在执行时,如果App.conifg文件中的内容,如connectionString或name的属性值设置有误,则程序将抛出异常。另需注意的是需在引用中加入System.Configuration的引用,而不是仅仅加上using语句。
4. 到MySQL的加密通讯
此方面的内容还需查阅资料,但非常重要。
5. 链接池
考虑到建议一个到数据库的物理链接的开销巨大,ADO.NET使用了链接池机制来重用先前已建立的链接。系统默认的链接池设置已经够用,一般我们无需再自行设置。
链接池位于客户端,而不是服务器端。
链接池中链接的生命周期是有限的,通常为几分钟,如要保证链接池中的链接至少有N个有用,则可把Min Pool Size属性设置为N
在查找BUG时,可以暂时关闭链接池(链接字符串中的Pooling = false)
服务器重启后,链接池中的链接可能失效,于是我们需要运行DBConnection的静态方法ClearPool()或ClearAllPools()来清空链接池中的链接,以避免抛出异常。