问个关于参数问题(结构问题)

rotApple 2011-12-15 02:24:32
为了通过配置文件配置当前数据库及使用相关的dbhelper,写了如下类:
public static basehelper dbfactory 反射当前配置的dbhelper

basehelper 基类

sqlhelper : basehelper

oledbhelper : basehelper

oraclehelper : basehelper

遇到一个问题是:
在basehelper基类里有:

public abstract DbParameter MakeParam(string paramName, Enum dataType, int size, ParameterDirection dir, object value);


然后在各个子类里面实现.

但是dataType参数不灵活怎么办? 因为OleDbType, SqlDbType这些枚举内的值对应的参类型都不一样, 所以实现的时候不能强转.
我希望的结果是不在开发环境里面传死的OleDbType.VarWChar之类. 那样以后要更改会很麻烦.

有没有什么好的点子?
谢谢大家.
...全文
119 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Enum dataType换成System.Data.DbType
maidou_6 2011-12-16
  • 打赏
  • 举报
回复
确实是设计问题。

关于dataType

基类中用 DbType

各子类中用 各自的 OleDbType、SqlDbType、等
bobobool 2011-12-16
  • 打赏
  • 举报
回复
枚举其实就是定义一堆变量,规定死的变量,
你再基类里加这些死的东西,明显是设计问题
我的理解是这个参数不能出现在基类里,它属于派生类私有成员
rotApple 2011-12-16
  • 打赏
  • 举报
回复
我知道DbType但是你在实现MakeParam的时候是要用具体的类的。

比如在OleDbHelper里面实现MakeParam:

需要new OleDbParameter(....这里有个参数是要用OleDbType的,不能用DbType
夜色镇歌 2011-12-16
  • 打赏
  • 举报
回复
是不是有个接口。。。
rotApple 2011-12-15
  • 打赏
  • 举报
回复
楼上你没看懂我说什么吧晕.

比如,在开发的时候使用:

DbParameter p = theHelper.MakeParam("uname", OleDbType.VarWChar, 16, ParameterDirection.Input);

这只能对应当前数据库是access的时候.

如果在配置文件改成sql, 那这里就要改成SqlDbType.NVarChar.

我不希望为了这个参数又把代码重编译一次, 那这样的话我要配置文件还有什么用. 还多写了那么多代码.
jiuhexuan 2011-12-15
  • 打赏
  • 举报
回复
Enum就很不错啊
正好用来对应,不一致类型,但业务一致的情况

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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