SimpleQuery – 通过 ADO.NET 实现快速简便的数据库访问






2.63/5 (6投票s)
2005 年 8 月 9 日
3分钟阅读

38493

620
一个允许轻松针对 .NET 数据源运行 T-SQL 代码的类。
引言
这是我的第一篇 CodeProject 文章,请手下留情 :)。
SimpleQuery
是一个设计用于针对 .NET 连接运行简单 T-SQL 语句的类。为此,SimpleQuery
包含三个静态方法来执行 T-SQL 语句,并返回受影响的记录计数 (ExecuteNonQuery
)、结果集的数据集 (ExecuteSelectQuery
),或者从结果集的第一行第一列返回标量值 (ExecuteScalar
)。
三个公共函数头如下所示
public static int ExecuteNonQuery(string SQL, System.Data.IDbConnection connection)
public static SD.DataSet ExecuteSelectQuery(string SQL,
System.Data.IDbConnection connection)
public static object ExecuteScalar(string SQL, System.Data.IDbConnection connection)
这些方法都接受一个包含要运行的 T-SQL 代码的字符串和一个用于运行 SQL 的 IDBConnection
对象。
默认情况下,SimpleQuery
不会对它接收的连接对象进行任何修改,类客户端有责任确保在调用之前连接已打开。 存在一个名为 AutoConnect
的属性,当设置为 true(默认为 false)时,将检查连接是否已打开。 如果未打开,则将在运行 SQL 代码之前打开连接。 如果 SimpleQuery
打开了数据库连接,那么它总会在完成后关闭它。 如果您希望在 SimpleQuery
外部控制连接的状态,请将 AutoConnect
设置为 false。
在内部,有几个名称相似的重载私有静态函数,每个实际连接类型都有一个(目前支持 OdbcConnection
、OleDbConnection
和 SQLClientConnection
),并且根据传递给公共方法的连接对象的类型调用相关的函数。
背景
开发此类的原因是我最近必须为客户开发的一套工具。 这些工具最初是用 VB6 编写的,并使用 DAO 和 ADO 2.7。 此外,某些工具注定要用于某些预配置的机器,这意味着某些工具必须使用 ODBC 或 OLEDB 连接,具体取决于要部署它们的机器。 所以我想要一种快速简便的方法来针对任何数据库运行 SQL 代码。
使用代码
该代码非常容易使用,所有成员都是静态的,因此只需要包含 SimpleQuery.cs 文件并直接引用所需的方法即可。
// Assumes myConnection has already been created
SimpleQuery.AutoConnect = true;
DataSet dsTest = SimpleQuery.ExecuteSelectQuery(“SELECT * FROM AUTHORS”,
myConnection);
int count = SimpleQuery.ExecuteScalar(“SELECT COUNT(*) FROM AUTHORS”,
myConnection);
int deletedCount = SimpleQuery.ExecuteNonQuery(“DELETE * FROM SomeTable”,
myConnection);
任何异常都会被捕获并包装在 SimpleQueryException
对象中,该对象包含两个额外的属性,QueryCode
和 ConnectionString
,其中包含 SQL 字符串和来自连接对象的连接字符串; 原始异常可以通过 innerException
正常访问。
关注点
顾名思义,该类旨在提供对数据库的非常快速和简单的访问,虽然在许多应用程序中可能需要更精细的控制,但我发现此类对于小型应用程序、数据库转换工具和原型设计非常有用。
该代码使用 NUnit 进行测试,但测试类与我需要整理的其他一些帮助类捆绑在一起,然后才能在此处发布。
还有 XML 注释,我希望尽快将它们转换为某种正确的帮助文件,只要我安装了 NDoc ;)。
历史
- V1.0 - 为 CodeProject 进行了清理。
- V1.1 - 根据 Richard Deeming 在下面的评论,修改了
ExecuteScalar
和ExecuteNonQuery
的内部处理。 添加了AutoConnect
属性。