1、通用数据访问层源代码:BinaryIntellect 的 Database Helper for .NET 2.0 (尚待研究)
下载地址:http://www.binaryintellect.net/products/e0d28f9c-238e-43ae-a00b-59ddc33bfa87.aspx
有人评价是很好的Microsoft's DAAB 2.0(尚待研究)替换品。
《Developing generic data access layer using ADO.NET 2.0》也有相关分析(英文)
这里有人简单地分析了一下该源代码(类)
的内容:http://www.cnblogs.com/chf/articles/614852.html (未看)
注:以上内容是在学习provider模型时发现的(ASP.NET 2.0在全部其架构中都利用提供者模型。):http://www.cnblogs.com/fengmk2/archive/2006/11/25/572176.html (尚待看完)
2、发现一个快速实现数据库操作块的工具:Codehelper v3.0 代码助手,但没下载到,有待研究
3、刚刚学到一个语法:
public class DatabaseHelper:IDisposable
{
public DatabaseHelper(string connectionstring,Providers provider)
{
}
public DatabaseHelper(string connectionstring): this(connectionstring, Providers.SqlServer)
{
// 这里的this用法指代调用类本身的一个构造函数,即前面那个构造函数。
}
}
4、两个方法:
DbCommand.ExecuteScalar 方法 :执行查询,并返回查询所返回的结果集中第一行的第一列。所有其他的列和行将被忽略。
适用:该方法用于执行只返回单个值的SELECT查询和存储过程,常用于Count(),Min(),Max()等。
DbCommand.ExecuteNonQuery 方法 :对连接对象执行 SQL 语句。返回值为受影响的行数。可以使用 ExecuteNonQuery 执行编录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句更改数据库中的数据。虽然 ExecuteNonQuery 不返回任何行,但是映射到参数的任何输出参数或返回值都会用数据进行填充。对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于其他所有类型的语句,返回值为 -1。
5、 ADO.NET 2.0中,更偏向于用继承而不是使用接口:
Data provider class | Base class |
Connection | DbConnection |
Command | DbCommand |
Parameter | DbParameter |
DataReader | DbDataReader |
Dataadapter | DbDataAdapter |
Transaction | DbTransaction |
比如说SqlConnection和OracleConnection类都是继承至基类DbConnection。
ADO.NET 2.0同时提供一系列的“工厂”类帮助动态创建这些基类的实例。比如SqlClientFactory类可以创建SqlConnection, SqlCommand等等的实例,列举该类的一些方法如下:
Factory class method | Purpose |
CreateConnection | Creates an instance of SqlConnection class |
CreateCommand | Creates an instance of SqlCommand class |
CreateParameter | Creates an instance of SqlParameter class |
CreateDataAdapter | Creates an instance of SqlDataAdapter class |
CreateCommandBuilder | Creates an instance of SqlCommandBuilder class |
参考代码:
public void ExecuteQuery(string sql,string provider)
{
DbConnection cnn=null;
DbCommand cmd=null;
DbProviderFactory factory = null;
switch(provider)
{
case "sqlclient":
factory = SqlClientFactory.Instance;
break;
case "oracleclient":
factory = OracleClientFactory.Instance;
break;
}
cnn = factory.CreateConnection();
cmd = factory.CreateCommand();
//now use cnn and cmd as usual to execute a query
}
6、《小菜编程成长记》可以看看:
http://cj723.cnblogs.com/
7、还有NBearV3 Step by Step教程——ORM篇 也可以看看:
http://www.cnblogs.com/teddyma/archive/2006/11/03/549118.aspx