如何创建一个与数据库类型无关的数据库访问类?

xiehuiqi 2007-11-30 08:40:20
我的意思是
编写一个类,在该类中定义所使用的数据库类型,如sql server、my sql、access、oracle等,编译成dll
我尽量使用IDbConnection、IDbCommand、IDataReader等类型
但是出现两个问题:
1、创建DataAdapter出现问题
2、某些成员函数类似这样的情况:public IDataReader DataReader(string sql,IDataParameter[] paras),但是引用该成员函数时却不知道如何创建IDataParameter类型的参数集合,只能创建具体的Oledb或者sqlPar...
-------
下面是我的代码:
namespace webchat
{
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
/// <summary>
/// DataAccess 的摘要说明
/// </summary>
public class dbconn
{
private IDbConnection idbConn;
/// <summary>
/// 构造函数
/// </summary>
public dbconn()
{
idbConn=new System.Data.OleDb.OleDbConnection();
idbConn.ConnectionString=ConfigurationSettings.AppSettings["WC_connstr"].Replace("$dbAddr",System.Web.HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings["WCdbpath"]));
}
/// <summary>
/// 打开连接
/// </summary>
public ConnectionState Open()
{
idbConn.Open();
return idbConn.State;
}
/// <summary>
/// 关闭连接
/// </summary>
public ConnectionState Close()
{
idbConn.Dispose();
idbConn.Close();
return idbConn.State;
}
/// <summary>
/// 执行sql语句
/// </summary>
public int ExecuteSQL(string sql,IDataParameter[] paras)
{
IDbCommand IDbCom=idbConn.CreateCommand();
IDbCom.CommandText=sql;
try
{
if(paras!=null)
{
foreach (IDataParameter parm in paras)
IDbCom.Parameters.Add(parm);
}
return IDbCom.ExecuteNonQuery();
}
catch(Exception)
{
return 0;
}
}
/// <summary>
/// 返回DataReader
/// </summary>
public IDataReader DataReader(string sql,IDataParameter[] paras)
{
IDbCommand IDbCom=idbConn.CreateCommand();
IDbCom.CommandText=sql;
try
{
if(paras!=null)
{
foreach (IDataParameter parm in paras)
IDbCom.Parameters.Add(parm);
}
IDataReader dr=IDbCom.ExecuteReader();
return dr;
}
catch(Exception)
{
return null;
}
}
/// <summary>
/// 返回DataReader
/// </summary>
public OleDbDataAdapter DataAdapter(string sql)
{
return new OleDbDataAdapter(sql,idbConn);//不知道如何创建与数据库类型无关的Adapter
}
}
}


...全文
88 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ly_05054 2008-07-11
  • 打赏
  • 举报
回复
rtrthdsg
xiehuiqi 2007-12-11
  • 打赏
  • 举报
回复
啊???第一次听说模式和平台有关.........

依赖抽象,SqlDataReader,OledbDataReader,OrcaleDataReader,统统属于一个接口,就是IDataReader
其实就是工厂模式了,你的业务逻辑不关心到底是那个Reader,可以用它们的“父亲”去接到他们,就用IdataReader
LZ说不知道SqlDataAdapter属于哪个接口,查查MSDN,就知道了。
上Baidu学习下依赖注入
-------------------------
我知道设计模式和平台无关!我的意思是asp.net 2.0中才有DbProviderFactory这个类的,而asp.net 1.1没有

说的比做的难
我如果一点都不懂就不会写出我帖出的代码,我写的代码本来完全可以兼容所有数据库平台了,只是想研究的更深入一点

其实写出这个类的道理大家都懂,我看过asp.net的书很多,但是没见过一本书有完整的健壮的与数据库无关的连接类

回答我这个问题的人很多,究竟有谁真正写过这样的一个类呢?
lem12 2007-12-07
  • 打赏
  • 举报
回复
工厂模式
jayfushuai 2007-12-07
  • 打赏
  • 举报
回复
asp.net 1.1不支持工厂模式吧?
==================================================
啊???第一次听说模式和平台有关.........

依赖抽象,SqlDataReader,OledbDataReader,OrcaleDataReader,统统属于一个接口,就是IDataReader
其实就是工厂模式了,你的业务逻辑不关心到底是那个Reader,可以用它们的“父亲”去接到他们,就用IdataReader
LZ说不知道SqlDataAdapter属于哪个接口,查查MSDN,就知道了。
上Baidu学习下依赖注入
mextb1860 2007-12-06
  • 打赏
  • 举报
回复
每个数据库的类型都有区别的。
xiehuiqi 2007-12-06
  • 打赏
  • 举报
回复
这个能解决,泛型就好了
public class dbconn <Tconn,Tcommand,Tadapter........>
where Tconn IDbConnection
where Tcommand ............
{
//...........
}
------------------------------
如何传递Parameter?好像只能用具体的如OleDbParameter
xiehuiqi 2007-12-06
  • 打赏
  • 举报
回复
asp.net 1.1不支持工厂模式吧?
gcaling2006 2007-12-01
  • 打赏
  • 举报
回复
工厂模式
Red_Tan 2007-12-01
  • 打赏
  • 举报
回复
这个能解决,泛型就好了
public class dbconn <Tconn,Tcommand,Tadapter........>
where Tconn IDbConnection
where Tcommand ............
{
//...........
}
xiehuiqi 2007-12-01
  • 打赏
  • 举报
回复

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧