关于多种数据库访问的通用类的设计问题。

寒星 2004-09-09 12:31:51
最近一直在做多种数据库访问通用类的设计工作。目前遇到的问题是:Oracle与SQL Server对sql的支持大不一样。比如说,一个允许为空的varchar型列,在SQL Server中允许赋予'',但Oracle中就不支持这种赋值方式。还有就是Oracle中典型的日期型列的问题。请问各位有没有什么比较好的解决方案可以Share一下。分不够可以再加。谢谢。
...全文
194 18 打赏 收藏 举报
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
寒星 2004-09-09
谢谢。给分了。
  • 打赏
  • 举报
回复
penning 2004-09-09
http://blog.csdn.net/billy_zh/archive/2004/08/12/72768.aspx
  • 打赏
  • 举报
回复
寒星 2004-09-09
to dahuzizyd(你就是我心中的女神):
我在SourceForge上找到NHibernate了,它有什么用呢?只知道是Database Foundry, Distributed Computing Foundry。能介绍一下吗?
  • 打赏
  • 举报
回复
寒星 2004-09-09
NHibernate好象是要收费的吧。而且我对这玩意儿也不了解。给你地址研究一下吧。今天下班前结贴。
  • 打赏
  • 举报
回复
dahuzizyd 2004-09-09
作一个sql解析器恐怕太困难了些。不过可以试试NHibernate
  • 打赏
  • 举报
回复
qimini 2004-09-09
不错的问题~~~可惜我解决不了~~~帮你顶吧~~~

我也在困惑默认值的问题~~~
  • 打赏
  • 举报
回复
寒星 2004-09-09
哪位兄弟还有高见啊?给点意见呀。我已经要连续回复三次了。再次对csdn的这种防灌水机会表示遗憾。:S
  • 打赏
  • 举报
回复
寒星 2004-09-09
我希望能给用户减轻这方面的负担,不需要他们去关心这些(除了一些特殊的针对数据库的应用)。
  • 打赏
  • 举报
回复
寒星 2004-09-09
to penning(飞鱼):
对数据库类型的判断不用这么麻烦吧,我是通过在配置文件中指定,然后在程序中解析完成的。不用去分析连接字符串吧。:D
 请问你对不同数据库对sql的支持不同的问题有什么好方法吗?
  • 打赏
  • 举报
回复
penning 2004-09-09
这个好像比较难,我现在的写法是
private string QueryCommandText = "...";
private string OracleQueryCommandText = "..."


if(this.ConnectionString.ToLower().IndexOf("orcale")>0)
{
strPageCommandText = string.Format(this.OracleQueryCommandText, configFields);
}
else
{
strPageCommandText = string.Format(this.QueryCommandText, configFields);
}
使用查询语句不同的写法
  • 打赏
  • 举报
回复
寒星 2004-09-09
to jiezhi(風依舊):
谢谢。我是想听听各位有没有好的解决方案。事实上,目前我有一个不是很成熟的解决方案,可以解决部分问题,但解决不了sql分析解析问题。:P
  • 打赏
  • 举报
回复
jiezhi 2004-09-09
想随意写一种你熟悉的sql(比如ms sql的或者oracle的),然后就能解析的话,你需要写一个sql分析转换器这样的东西。

现在似乎还没有这样的东西可用的,自己写了...
  • 打赏
  • 举报
回复
寒星 2004-09-09
to penning(飞鱼):
没想到我自己的设计和你的文章中所述的大同小异:),不过,它并没有解决我想要解决的问题。:(。我的问题见上面的回复。
  • 打赏
  • 举报
回复
jiezhi 2004-09-09
http://www.gotdotnet.com/Community/Workspaces/workspace.aspx?id=c20d12b0-af52-402b-9b7c-aaeb21d1f431
  • 打赏
  • 举报
回复
寒星 2004-09-09
我的确是使用了工厂模式,但是我不太想,单独对某一种数据库写一套访问类。不知道.Net中有没有类似于Apache Torque的东东?很想知道它是怎么实现的。其实,我的想法很简单,比如说吧,这样一条SQL语句:Select * From Table1 Where Date1>='2004-09-09',可以直接被解析。开发人员不需要去因为是面向Oracle数据库,而将它写成Select * From Table1 Where Date1>=To_Date('2004-09-09','DD-MON-YYYY')。有没有什么方法可以实现。
  • 打赏
  • 举报
回复
penning 2004-09-09
http://www.yesky.com/SoftChannel/72342380468109312/20040518/1798707.shtml
  • 打赏
  • 举报
回复
penning 2004-09-09
使用工厂模式
  • 打赏
  • 举报
回复
blastball 2004-09-09
分别解析,一个通用的接口,对不同数据库调不同模块就可以了
  • 打赏
  • 举报
回复
发帖
C#
加入

10.7w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
申请成为版主
帖子事件
创建了帖子
2004-09-09 12:31
社区公告

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