------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
从.net 2.0开始,有一种预定义的方式存储链接字符串,甚至是以类型未知的方式来使用数据库连接。例如,可以编写应用程序,然后插入各个数据库提供程序,这些都无需修改猪应用程序。
web应用程序中,在web.config下配置节点信息。WinForm 程序中,在App.config下配置节点信息。
<configuration>
...
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=.;Initial Catalog=MyShop;Integrated Security=True"/>
</connectionStrings>
...
</configuration>
在配置文件中定义好数据库连接信息后,就需要在应用程序中利用该信息。
1、获取连接字符串
public static string ConnectionString
{
get
{
string _connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
return _connectionString;
}
}
2、高效的使用连接
主要有两种方式确保数据库连接等类似的“稀缺”资源在使用完后立即释放
第一种方式:try...catch...finally语句块
try
{
conn.Open();//打开数据库连接
}
catch(SqlException ex)
{
//捕捉异常信息,记录
}
finally
{
conn.Close();//关闭数据库连接
}
在finally块中,可以释放已经使用的任何资源。在给定的方法中可能会打开许多资源(如多个数据库连接和一个文件),这种情况下,该try...catch...finally语句块的层次有时不易看懂。另外,finally块中有时忘记写关闭连接命令了。
还有一种方法可以很好的解决这个问题,就是使用using语句块
2、using语句块
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand cmd = new SqlCommand(SQLString, connection))
{
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();//执行命令,返回受影响的记录个数
return rows;
}
catch (System.Data.SqlClient.SqlException e)
{
connection.Close();
throw e;
}
}
}
3、执行命令
SqlCommand类有以下几种可执行的命令
ExecuteNonQuery();返回受影响的记录个数
ExecuteReader();返回一个类型化的DataReader
ExecuteScalar();返回结果集中第一行第一列的值
ExecuteXmlReader();返回一个XmlReader对象,它可以遍历从数据库中返回的XML片段
DataReader对象允许开发人员获得从Command对象的select语句得到的结果。考虑性能的因素,从DataReader返回的数据都是快速的且只是“向前”的数据流。这意味着开发人员只能按照一定的顺序从数据流中取出数据。这对于速度来说是有好处的,但是如果开发人员需要操作数据,更好的办法是使用DataSet。
DataSet类
DataSet类是数据的脱机容器。它不包含数据库连接的概念,实际上存储在DataSet中的数据不一定来于数据库,它可以是来自CSV文件、XML文件的记录,或是从测量设备中读取的点。
DataSet类由一组数据表组成,每个表独有一组数据列和数据行。在DataSet中还可以定义表之间的链接。DataSet类基本上是内存中的数据库,其中包含了所有表、关系和约束。
用数据适配器来填充DataSet:
string sqlString=“select Name, Password From TUsers”;
SqlConnection conn=new SqlConnection(ConnectionString);
SqlDataAdapter da=new SqlAdaper(sqlString,conn);
DataSet ds=new DataSet();
da.Fill(ds,"TUsers");