如何创建一个与数据库类型无关的数据库访问类?
我的意思是
编写一个类,在该类中定义所使用的数据库类型,如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
}
}
}