65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.63/5 (6投票s)

2005 年 8 月 9 日

3分钟阅读

viewsIcon

38493

downloadIcon

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。

在内部,有几个名称相似的重载私有静态函数,每个实际连接类型都有一个(目前支持 OdbcConnectionOleDbConnectionSQLClientConnection),并且根据传递给公共方法的连接对象的类型调用相关的函数。

背景

开发此类的原因是我最近必须为客户开发的一套工具。 这些工具最初是用 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 对象中,该对象包含两个额外的属性,QueryCodeConnectionString,其中包含 SQL 字符串和来自连接对象的连接字符串; 原始异常可以通过 innerException 正常访问。

关注点

顾名思义,该类旨在提供对数据库的非常快速和简单的访问,虽然在许多应用程序中可能需要更精细的控制,但我发现此类对于小型应用程序、数据库转换工具和原型设计非常有用。

该代码使用 NUnit 进行测试,但测试类与我需要整理的其他一些帮助类捆绑在一起,然后才能在此处发布。

还有 XML 注释,我希望尽快将它们转换为某种正确的帮助文件,只要我安装了 NDoc ;)。

历史

  • V1.0 - 为 CodeProject 进行了清理。
  • V1.1 - 根据 Richard Deeming 在下面的评论,修改了 ExecuteScalarExecuteNonQuery 的内部处理。 添加了 AutoConnect 属性。
© . All rights reserved.