对于使用微软的DataAccess Application Block的朋友,我这里有另一个选择,DbHelper。这是一个我做的Helper,用来满足自己的需求。这里介绍一下以便大家参考。

微软的DataAccess Application Block与DbHelper目的基本相同,它们没有谁好谁坏,只有适合与不适合,它们的区别在于:

  1. DbHelper的使用方式更简单。主要是因为把参数的部分简化了许多,现在根本不用生成参数了,但是对传入的参数对象也予以支持。
  2. DbHelper支持基本上所有的.NET下的Data Provider,而不只是SQL Server, Oracle与DB2,对其他非自带的Data Provider只需要实现一下获取其识别参数的方式就可以对其提供支持了,具体请见示例。
  3. 因为我不用存储过程,所以目前版本的DbHelper不支持存储过程。不过如果很多人需要的话我可以考虑添加这个功能。

以下为各种使用示例:

Executes a SQL command

DbHelper basic usageusing Cavingdeep.Util.DataAccess;
DbHelper basic usage
DbHelper basic usage
// 创建一个SqlHelper的实例。
DbHelper basic usage
IDbHelper dbHelper = new SqlHelper(connection);
DbHelper basic usage
DbHelper basic usage
string insertCommandText = "INSERT INTO test VALUES (@text, @record_date)";
DbHelper basic usage
DbHelper basic usage
// 执行SQL命令。
DbHelper basic usage
dbHelper.ExecuteCommand(insertCommandText, "Text1", DateTime.Now);
DbHelper basic usage

就是这样简单,不用声明SQL参数,直接将参数值传入便可以了。不过当你需要明确指定参数类型等信息时也可以生成参数对象后传入,像以下示例。以下示例是一个混合模式的参数传入:

DbHelper basic usagestring insertCommandText = "INSERT INTO test VLAUES (@text, @record_date)";
DbHelper basic usage
DbHelper basic usageSqlParameter parameter 
= new SqlParameter();
DbHelper basic usageparameter.ParameterName 
= "@record_date";
DbHelper basic usageparameter.Value 
= DateTime.Now;
DbHelper basic usageparameter.DbType 
= DbType.DateTime;
DbHelper basic usage
DbHelper basic usagedbHelper.ExecuteCommand(insertCommandText, 
"Text1", parameter);

ExecuteReader

DbHelper basic usagestring selectCommandText = "SELECT text, record_date FROM test WHERE text = @text";
DbHelper basic usage
}

Execute DataSet

DbHelper basic usagestring selectCommandText = "SELECT text, record_date FROM test WHERE text = @text";
DbHelper basic usage
DbHelper basic usageDataSet ds 
= dbHelper.ExecuteDataSet("Test", selectCommandText, "Text1");

Transaction overloaded methods

DbHelper basic usagestring insertCommandText = "INSERT INTO test VALUES (@text, @record_date)";
DbHelper basic usage
DbHelper basic usageconnection.Open();
DbHelper basic usageSqlTransaction transaction 
= connection.BeginTransaction();
}

Extending support for other data providers

假设我们要对OLEDB进行支持,一般来说第一个步骤就是要实现IDbHelper接口,但是我们大可不必如此费事,DbHelper自带了一个默认支持多Data Provider的IDbHelper实现,这个实现就叫做"DbHelper",所以我们只要继承"DbHelper"就可以了,如下:

DbHelper basic usageusing System.Data.OleDb;
DbHelper basic usage
}

将DbHelper需要的第三方data provider的各种类型传入DbHelper的构造方法中就可以了。不过值得注意的是还需要传入一个IParameterRecognizer,这个就是唯一需要我们自行实现的部分。IParameterRecognizer的作用是识别第三方data provider所支持的SQL参数的写法,比如SQL Server中是"@parameterName",OLEDB中要用"?"等等。这里我提供一个OleDb的IParameterRecognizer实现以供参考:

}

基本上就是用正则表达式去找出符合规则的SQL参数,然后将参数名字添加到集合中,最后返回一个参数名的数组。注意OLEDB中是没有参数名的,所以每找到一个参数我就向集合中添加一个null值。

好了,一切都写好了后就可以完美的支持第三方data provider了。^_^

相关文章:

  • 2022-01-17
  • 2022-12-23
猜你喜欢
  • 2021-10-18
  • 2021-09-17
  • 2022-12-23
  • 2022-01-06
  • 2022-12-23
  • 2021-10-23
相关资源
相似解决方案