用C#实现的数据库抽象工厂(一)

王朝c#·作者佚名  2006-01-09
宽屏版  字体: |||超大  

用C#实现的数据库抽象工厂(一)

最近学习了一下设计模式,便尝试用C#对数据库的访问操作采用抽象工厂的模式实现一下,其中与标准的模式略有不同,加入了一些自己的想法,希望大家批评指正,代码共分为6个类:

(1)AbstractDbFactory.cs

using System;

using System.Data;

namespace DbService

{

/// <summary>

/// 数据库抽象工厂接口

/// </summary>

public interface AbstractDbFactory

{

/// <summary>

/// 建立默认连接

/// </summary>

/// <returns>数据库连接</returns>

IDbConnection CreateConnection();

/// <summary>

/// 根据连接字符串建立Connection对象

/// </summary>

/// <param name="strConn">连接字符串</param>

/// <returns>Connection对象</returns>

IDbConnection CreateConnection(string strConn);

/// <summary>

/// 建立Command对象

/// </summary>

/// <returns>Command对象</returns>

IDbCommand CreateCommand();

/// <summary>

/// 建立DataAdapter对象

/// </summary>

/// <returns>DataAdapter对象</returns>

IDbDataAdapter CreateDataAdapter();

/// <summary>

/// 根据Connection建立Transaction

/// </summary>

/// <param name="myDbConnection">Connection对象</param>

/// <returns>Transaction对象</returns>

IDbTransaction CreateTransaction(IDbConnection myDbConnection);

/// <summary>

/// 根据Command建立DataReader

/// </summary>

/// <param name="myDbCommand">Command对象</param>

/// <returns>DataReader对象</returns>

IDataReader CreateDataReader(IDbCommand myDbCommand);

/// <summary>

/// 获得连接字符串

/// </summary>

/// <returns>连接字符串</returns>

string GetConnectionString();

}

}

(2)Factory.cs

using System;

using System.Configuration;

namespace DbService

{

/// <summary>

/// Factory类

/// </summary>

public sealed class Factory

{

private static volatile Factory singleFactory = null;

private static object syncObj = new object();

/// <summary>

/// Factory类构造函数

/// </summary>

private Factory()

{

}

/// <summary>

/// 获得Factory类的实例

/// </summary>

/// <returns>Factory类实例</returns>

public static Factory GetInstance()

{

if(singleFactory == null)

{

lock(syncObj)

{

if(singleFactory == null)

{

singleFactory = new Factory();

}

}

}

return singleFactory;

}

/// <summary>

/// 建立Factory类实例

/// </summary>

/// <returns>Factory类实例</returns>

public AbstractDbFactory CreateInstance()

{

AbstractDbFactory abstractDbFactory = null;

switch(ConfigurationSettings.AppSettings["DatabaseType"].ToLower())

{

case "sqlserver":

{

abstractDbFactory = new SqlFactory();

break;

}

case "oledb":

{

abstractDbFactory = new OleDbFactory();

break;

}

case "odbc":

{

abstractDbFactory = new OdbcFactory();

break;

}

}

return abstractDbFactory;

}

}

}

待续......

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有