内部设计
数据访问应用程序块包含了完整的源代码和有关其设计的综合指南。本节介绍有关主要实现的详细信息。
SqlHelper 类实现详细信息
SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。
在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。在 SqlHelper 类中实现的方法包括:
•
ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。
•
ExecuteReader。此方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集。
•
ExecuteDataset。此方法返回 DataSet 对象,该对象包含由某一命令返回的结果集。
•
ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。
•
ExecuteXmlReader。此方法返回 FOR XML 查询的 XML 片段。
•
FillDataset。此方法类似于 ExecuteDataset,不同之处在于可以传入预先存在的 DataSet,从而允许添加附加表。
•
UpdateDataset。此方法使用现有的连接和用户指定的更新命令来更新 DataSet。它通常与 CreateCommand 命令结合使用。
•
CreateCommand。此方法允许提供存储过程和可选参数,从而简化了 SQL 命令对象的创建过程。此方法通常与 UpdateDataset 结合使用。
•
ExecuteNonQueryTypedParams。此方法使用数据行而不是参数来执行非查询操作。
•
ExecuteDatasetTypedParams。此方法使用数据行而不是参数来执行 DataSet 创建操作。
•
ExecuteReaderTypedParams。此方法使用数据行而不是参数来返回数据读取器。
•
ExecuteScalarTypedParams。此方法使用数据行而不是参数来返回标量。
•
ExecuteXmlReaderTypedParams。此方法使用数据行而不是参数来执行 XmlReader。
除了这些公共方法以外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过使用 SqlCommand 对象来执行。在执行此 SqlCommand 对象之前,必须将所有参数添加到它的 Parameters 集合中,并且必须相应地设置 Connection、CommandType、CommandText 和 Transaction 属性。SqlHelper 类中的专用函数主要用于提供一种一致的方式,以便对 SQL Server 数据库执行命令,而不考虑客户端应用程序所调用的重载方法实现。SqlHelper 类中的专用实用工具函数包括:
•
AttachParameters。该函数用于将任何需要的 SqlParameter 对象附加到要执行的 SqlCommand。
•
AssignParameterValues。该函数用于向 SqlParameter 对象赋值。
•
PrepareCommand。该函数用于对命令的属性(如连接、事务上下文等)进行初始化。
•
ExecuteReader。ExecuteReader 的这一专用实现用于打开 SqlDataReader 对象,并使用相应的 CommandBehavior 以最有效的方式来管理与该读取器关联的连接的生命期。
SqlHelperParameterCache 类实现详细信息
参数数组缓存在专用的 Hashtable 中。从缓存中检索的参数在内部进行复制,这样客户端应用程序能够更改参数值以及进行其他操作,而不会影响缓存的参数数组。专用共享函数 CloneParameters 用于实现此目的。