C#中的数据库访问工厂
2012-07-30 15:23
211 查看
C#已经自己为不同类型数据库的访问做了一个工厂。
首先是配置文件:其中的providerName就是指定的不同数据库类型
<connectionStrings>
<add name="..." connectionString=" ..." providerName="System.Data.OleDb" />
<add name="..." connectionString=" ..." providerName="System.Data.SqlClient" />
</connectionStrings>
下面看一下使用工厂的这个类:
class DataBaseFac
{
private DbConnection cnn;//抽象类型
private DbCommand cmd;//抽象类型
private DbProviderFactory provider;
public DataBaseFac()
{
//从配置文件中取出标示数据库类型的字符串
string providerName = ConfigurationManager.ConnectionStrings[1].ProviderName;
//根据上一部的结果工厂创建一个对应的实例
provider = DbProviderFactories.GetFactory(providerName);
//使用该实例就可以创建对应的connection,command和adapater对象了
//调试的时候可以看到这几个对象都变成了相应于数据库类型的
cnn = provider.CreateConnection();
cnn.ConnectionString = ConfigurationManager.ConnectionStrings[1].ConnectionString;
cmd = provider.CreateCommand();
cmd.Connection = cnn;
}
//执行一次查询,返回数据表
public DataTable ExcuteQuery(string queryString)
{
DataTable result = new DataTable();
DbDataAdapter adapter = provider.CreateDataAdapter();
cmd.CommandType = CommandType.Text;
cmd.CommandText = queryString;
adapter.SelectCommand = cmd;
try
{
cnn.Open();
adapter.Fill(result);
}
catch
{
result = null;
}
finally
{
cnn.Close();
}
return result;
}
以上只是简单的应用,并没有做比较高级的封装,只供参考。
顺便说说,有人用swith case语句来实现不同的创建connection ,command 和adapater的方法,然后说是工厂方法的实现。其实这是完全错误的,工厂模式的提出就是为了避免这么多swith case造成的麻烦。
首先是配置文件:其中的providerName就是指定的不同数据库类型
<connectionStrings>
<add name="..." connectionString=" ..." providerName="System.Data.OleDb" />
<add name="..." connectionString=" ..." providerName="System.Data.SqlClient" />
</connectionStrings>
下面看一下使用工厂的这个类:
class DataBaseFac
{
private DbConnection cnn;//抽象类型
private DbCommand cmd;//抽象类型
private DbProviderFactory provider;
public DataBaseFac()
{
//从配置文件中取出标示数据库类型的字符串
string providerName = ConfigurationManager.ConnectionStrings[1].ProviderName;
//根据上一部的结果工厂创建一个对应的实例
provider = DbProviderFactories.GetFactory(providerName);
//使用该实例就可以创建对应的connection,command和adapater对象了
//调试的时候可以看到这几个对象都变成了相应于数据库类型的
cnn = provider.CreateConnection();
cnn.ConnectionString = ConfigurationManager.ConnectionStrings[1].ConnectionString;
cmd = provider.CreateCommand();
cmd.Connection = cnn;
}
//执行一次查询,返回数据表
public DataTable ExcuteQuery(string queryString)
{
DataTable result = new DataTable();
DbDataAdapter adapter = provider.CreateDataAdapter();
cmd.CommandType = CommandType.Text;
cmd.CommandText = queryString;
adapter.SelectCommand = cmd;
try
{
cnn.Open();
adapter.Fill(result);
}
catch
{
result = null;
}
finally
{
cnn.Close();
}
return result;
}
以上只是简单的应用,并没有做比较高级的封装,只供参考。
顺便说说,有人用swith case语句来实现不同的创建connection ,command 和adapater的方法,然后说是工厂方法的实现。其实这是完全错误的,工厂模式的提出就是为了避免这么多swith case造成的麻烦。
相关文章推荐
- C#实现工厂模式简介--实现访问不同的数据库
- c#中的数据库访问工厂
- C#数据库访问(GenericDao)
- C#数据库工厂模式的实现
- 用C#实现的数据库抽象工厂
- 基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)
- C# 2005 访问数据库(一)
- C#程序访问PostgreSQL数据库
- C# DBEntry插件访问数据库在不同电脑报错 解决方法
- C#访问数据库使用web.config配置连接字串
- C#开发之访问数据库表数据
- NoSQL数据库—MongoDB入门使用和c#客户端的访问
- C#基础——数据库连接字符串及数据库访问
- 基于C# winform企业进销存软件开发(典型权限控制+报表工具+动态加载+多线程+跨数据库访问)
- c#访问access 数据库
- c#访问各数据库的providerName各驱动
- 一个简单实用的“数据库访问层”!(基于C#语言)
- c#访问各数据库的providerName各驱动
- C#设计模式之工厂模式(Factory)--04 抽象工厂模式中访问具体产品类的属性
- [C#新手入门 七] asp.net部署后访问数据库发生vs崩溃