我想实现一个类,ACCESS与SQL SERVER自适应

lapmx 2003-09-19 12:38:28
我想实现一个类,在具体操作时,根本就不知道,是ACCESS还是SQL SERVER,返回值都是公共的DataSet等,这样做可以很方便的将数据库ACCESS与SQL SERVER互换,但这样有什么不好呢?或者有谁写的有现成的类,我参考一下,大家讨论讨论
...全文
79 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjcccc 2003-09-19
  • 打赏
  • 举报
回复
还不如设计一个接口(或抽象类),然后派生两个类:SqlDbAccess和OleDbAccess,重载基类或实现接口。混在一个类有什么好(不符合oo的原则)?
seesea125 2003-09-19
  • 打赏
  • 举报
回复
字符串连接不同,写sql时用oledb方式,语句有些不同,需要自己调试了
比尔咔咔 2003-09-19
  • 打赏
  • 举报
回复

除了连接的字符串不同以外其它的都差不多

不过具体到SQL语句就麻烦了
这俩个在有些地方有差别的
91bct 2003-09-19
  • 打赏
  • 举报
回复
根据配置文件里的连接串等信息,判断数据库类型,并调用相关command进行数据处理,
如下是处理Sqlserver与Oracle的情形,用到三个类(仅供参考):
public System.Data.IDbCommand SelectCommand()
{
//****************************
string cmdtxt="Sql语句";
//****************************
switch( SystemFrames.AppConfig.DbType )
{
case SystemFrames.DBType.SqlServer:
{
SqlCommand cmd = new

SqlCommand();
cmd.CommandText = cmdtxt;
cmd.CommandType =

CommandType.Text;
cmd.Connection

=(SqlConnection) DbOperator.Connection;


//设置对应SqlServer的cmd.Parameter
return cmd;
}
case SystemFrames.DBType.Oracle:
{
OracleCommand cmd = new

OracleCommand();


//***************************************
cmd.CommandText =

"CURSPKG.SP_GET_TOP_ORG";//存储过程


//***************************************
cmd.CommandType =

CommandType.StoredProcedure;
cmd.Connection

=(OracleConnection) DbOperator.Connection;
cmd.Parameters.Add(new

OracleParameter("IO_CURSOR", OracleType.Cursor)).Direction
=

ParameterDirection.Output;
return cmd;
}
case SystemFrames.DBType.OleDB:
{
OleDbCommand cmd = new

OleDbCommand();
cmd.CommandText = cmdtxt;
cmd.CommandType =

CommandType.Text;
cmd.Connection

=(OleDbConnection) DbOperator.Connection;
//设置对应OleDb的cmd.Parameter
return cmd;
}
default:
return null;
}
}
//****************************************************************
/// <summary>
/// 通过SQL命令载入数据
/// </summary>
/// <param name="select">SQL命令</param>
/// <returns>已载入数据的表格</returns>
public static DataTable LoadData(IDbCommand select)
{
DataTable dt = new DataTable();
try
{
DbDataAdapter da =

CreateDataAdapter(select);
da.Fill(dt);
return dt;
}
catch
{
return null;
}
}
//****************************************************************
/// <summary>
/// 创建一个数据适配器的实例。
/// </summary>
/// <returns>数据适配器</returns>
public static DbDataAdapter

CreateDataAdapter(IDbCommand select)
{
switch( AppConfig.DbType )
{
case DBType.OleDB:
{
OleDbDataAdapter da = new

OleDbDataAdapter();
da.SelectCommand =

(OleDbCommand)select;
return da;
}
case DBType.Oracle:
{
OracleDataAdapter da = new

OracleDataAdapter();
da.SelectCommand =

(OracleCommand)select;
return da;
}
case DBType.SqlServer:
{
SqlDataAdapter da = new

SqlDataAdapter();
da.SelectCommand =

(SqlCommand)select;
return da;
}
default:
return null;
}
}
长江支流 2003-09-19
  • 打赏
  • 举报
回复
这是你最佳的选择
http://www.csdn.net/develop/Article/20/20071.shtm
孙亚民出自赛迪网
http://developer.ccidnet.com/pub/disp/Article?columnID=322&articleID=41083&pageNO=1
xavier_lee 2003-09-19
  • 打赏
  • 举报
回复
对!
不符合oo
lansingcy 2003-09-19
  • 打赏
  • 举报
回复
private IDbConnection _Conn = null;
private IDbCommand _Comm = null;
private object _CmBd = null ;
private IDbDataAdapter _DtAp = null ;

public IDataReader DtRd = null;
public DataSet DtSt = null ;

兄弟这是我作的,给分吧。

62,243

社区成员

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

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

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

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