数据访问应用块
为什么要使用数据访问应用块?
如果你写过ADO.NET数据访问代码,你可能会意识到大部分代码都是相同的,这些代码和你所使用的数据库或表并没有太大的关系。过程是先创建一个连接,写出命令,传递参数,然后再执行这条命令。你还要对异常进行处理以释放在这个过程中所产生的错误的内存分配资源。一个查询可以用很多种方法来表示,例如:
SqlConnection nwConn = new SqlConnection(CONNECTION_STRING);
try
{
nwConn.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "CustOrderHist";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = nwConn;
SqlParameter param = cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5);
param.Value = "ANATR";
SqlDataReader reader = cmd.ExecuteReader();
try
{
OutputData(reader);
}
finally
{
reader.Close();
}
}
finally
{
nwConn.Close();
}
数据访问应用块就是用来减化这个过程的。通过使用一个标准的接口来提供一组名称重载方法,DAAB就可以用很少的代码来得到上面代码的功能。代码如下:
SqlDataReader reader2 = SqlHelper.ExecuteReader(CONNECTION_STRING, "CustOrderHist", "ANATR");
try
{
OutputData(reader2);
}
finally
{
reader2.Close();
}
DAAB所做的工作是:创建和打开连接,构造命令对象,调用合适的ADO.NET方法及最后进行清除。这样看上去DAAB并不是十分高效。如果你对数据库进行了多次调用并且每次都创建一个新的连接,那么DAAB的效率也不会很高。DAAB提供的名称重载方法允许你传递的是一个SqlConnection参数,而不是一个具体的连接字符串。这种方法认为你的代码 – DAAB的外部代码 – 将会对连接进行管理。这样,DAAB就会象你自己动手编写的数据访问代码一样高效。
此外,DAAB可以正确地处理异常和进行资源清理,并且它还是免费的。
DAAB中包含什么?
DAAB中有两个helper类:SqlHelper和SqlHelperParameterCache。这两个类都是用私有构造函数封装的,因此不能对它们进行实例化。他们都是静态方法的包装。
SqlHelper:包含大多数常用数据访问要求的方法。
SqlHelperParameterCache:提供存储过程的参数类型缓存来优化对存储过程的访问。
和DAAB的多数交互工作都是通过SqlHelper类进行的。SqlHelperParameterCache类只供SqlHelper类在内部使用,一般不可以被应用程序直接调用。但在极少数情况下,应用程序需要直接缓存参数时,可以调用SqlHelperParameterCache类。