上接: [原创] 我的ORM: 开发自己的Data Access Application Block - Part I 4. Database 下面来介绍重中之重:Database,绝大部分的DataAccess 操作都集中在这个Abstract Database中。这是一个相对庞大的Class,所以不得不采用Partial Class的方式来编写。
上接:[原创] 我的ORM: 开发自己的Data Access Application Block - Part I4. Database
下面来介绍重中之重:database,绝大部分的data access 操作都集中在这个abstract database中。这是一个相对庞大的class,所以不得不采用partial class的方式来编写。
Part I:Field 和Property
这些Field 和Property基本上对应我们前面的Configuraiton。此为我们定义了三个Field 和Property:DbDataAdapter,Connection,_transaction。考虑到垃圾回收,使Database实现IDisposable接口。值得说明一点的是,我们通过Database的DatabaseProviderFactory创建了泛型的DbDataAdapter,DbConnection和Transaction。
-
ConnectionString:string
-
DatabaseProviderFactory:DbProviderFactory
-
DefaultCommandType:CommandType
-
UseCommandBuilder:bool
-
DbParameterNameMapping:IDbParameterNameMapping
慧谷动力企业网站系统3.9 商业版下载慧谷动力企业网站管理系统(www.elonr.com)中国企业网站达到50万用户,程序采用最简单易用的asp+access进行搭建,拥有完善的网站前后台,并特别根据企业网站的特点开发出独具特色的栏目和功能,让您能够在短时间内就拥有自己的企业网站,欢迎大家对演示网站进行测试,注意演示网站不能更改内容、修改和删除内容,否则会报错的,下载回去测试的用户可以修改添加删除的。
-
StoredProcedureNameMapping:IStoredProcedureNameMapping
-
DbDataAdapter:DbDataAdapter
-
Connection: DbConnection
-
Transaction: DbTransaction
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FContractedBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FNone.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
using Artech.ApplicationBlock.DataMapping;![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FNone.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
namespace Artech.ApplicationBlock.DataAccess![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FContractedBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
/**////
/// Database defines a series of database-based operations.
///
public abstract partial class Database : IDisposable![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
private bool _isDisposed;![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FContractedSubBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
The five private fields possess the corressponding pubic properties, and they are only allowed to be evaluated by Database Factory.#region The five private fields possess the corressponding pubic properties, and they are only allowed to be evaluated by Database Factory.
private DbProviderFactory _dbProviderFactory;
private string _connectionString;
private CommandType _defaultCommandType;
private bool _useCommandBuilder;
private IDbParameterNameMapping _dbParameterNameMapping;
private IStoredProcedureNameMapping _storedProcedureNameMapping;![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
/**////
/// Database connection string which is specified by the database factory.
///
public string ConnectionString![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
get![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
return this._connectionString;
}![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
set![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
this._connectionString = value;
}
}![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
/**////
/// The concrete database specific provider factory.
///
public DbProviderFactory DatabaseProviderFactory![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
get![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
return this._dbProviderFactory;
}
set![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
this._dbProviderFactory = value;
}
}![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
/**////
/// The defaull command type to perform the database operations which do not specify the commanf type.
///
public CommandType DefaultCommandType![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
get![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
return this._defaultCommandType;
}
set![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
this._defaultCommandType = value;
}
}![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
/**////
///Determine whether to use command builder or mapped stored procedures to execute database operations.
///
public bool UseCommandBuilder![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
get![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
return this._useCommandBuilder;
}
set![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
this._useCommandBuilder = value;
}
}![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
/**////
/// A string which indicates the type to perform mapping between stored procedure parameter and source column.
///
public IDbParameterNameMapping DbParameterNameMapping![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
get![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
return this._dbParameterNameMapping;
}
set![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
this._dbParameterNameMapping = value;
}
}![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
/**////
/// A string which indicates the type to perform mapping between table name and the related stored procedure names.
///
public IStoredProcedureNameMapping StoredProcedureNameMapping![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
get![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
return this._storedProcedureNameMapping;
}
set![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
this._storedProcedureNameMapping = value;
}
}
#endregion![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FContractedSubBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
Connection & Database DataAdapter#region Connection & Database DataAdapter
private DbDataAdapter _dbDataAdapter;
private DbConnection _connection;![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
/**////
/// A generic database data adapter which is responsible for save the changed data into database.
///
private DbDataAdapter DatabaseAdapter![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
get![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
if (this._dbDataAdapter == null)![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
this._dbDataAdapter = this._dbProviderFactory.CreateDataAdapter();
this._dbDataAdapter.AcceptChangesDuringUpdate = false;
this._dbDataAdapter.MissingSchemaAction = MissingSchemaAction.Add;
}![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
return this._dbDataAdapter;
}
}![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
/**////
/// The database connection.
///
private DbConnection Connection![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
get![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
if (this._connection == null)![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
{
this._connection = this._dbProviderFactory.CreateConnection();
this._connection.ConnectionString = this._connectionString;
}![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
return this._connection;
}
}
#endregion![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FInBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FContractedSubBlock.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
Constructor#region Constructor
public Database()![开发自己的Data Access Application Block[下篇]](/inc/test.jsp?url=http%3A%2F%2Fwww.cnblogs.com%2FImages%2FOutliningIndicators%2FExpandedSubBlockStart.gif&refer=http%3A%2F%2Fwww.cnblogs.com%2Fartech%2Farchive%2F2007%2F04%2F03%2F698762.html)
&









