CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  新技术前沿

让你的SQL也能实现全球通,生活更轻松,美女爱老公,关于sql转换器

楼主jam123()2006-11-10 23:08:45 在 MS-SQL Server / 新技术前沿 提问

自从这个世界蛋生了sql,就让程序员们陷入困惑,不同数据库厂家虽然宣称兼容sql标准,但事实上出于产品功能或性能的需要,对sql标准的具体实现多多少少会有差异。例如功能相同,厂家不同的两条sql语句:  
   
  mssql:   select   top   3   *   from   products  
  mysql:   select   *   from   products   limit   0,3  
   
  当你需要设计一个兼容全世界数据库的程序或非特定数据库程序时,将会面临痛苦,虽然可以用建模工具一次搞定各种数据库,但你的程序却得一个个写。好的建议是设计一个DAL抽象类,然后根据不同的数据库去实现不同版本的DAL子类,然后用Factory   method   获取特定实例.这是一个很好且完美的解决方案。唯一的坏处是,无论sql语句多简单,你也得同时实现两个版本的DAL,如果我们拥有一个sql转换器,就么就可以轻松解决这个问题。例如  
   
  SqlConvertor.From("select   top   3   *   from   products");   //输入标准sql语句  
  string   sql=SqlConvertor.To("mysql");   //输出针对mysql语句select   *   from   products   limit   0,3  
  string   sql=SqlConvertor.To("oracle");   //输出针对Oracle语句select   top   3   *   from   products  
   
  拥有了SqlConvertor,我们便解决了多版本的问题,我们只需要输入标准的sql,就可根据特定数据库得到具体版本的sql。但它有几个限制:  
   
  1.只能实现简单和常用函数的转换,因为不同数据库有不同存储过程或函数,要实现大部分转换是可能的,但兼容各个厂商数据库工作量惊人,不太现实。  
  2.存储过程或函数会受到使用限制,但会提示不能转换的函数  
   
  好处是:  
  1.编写简单的sql很轻松实现数据库兼容。  
  2.提供额外的安全访问权限控制。传统上我们通过控制数据库的用户或角色来实现访问控制,如果角色或权限是动态设定的,程序会相应变得复杂且难写。而SqlConvertor却很容易实现权限控制,例如  
   
  SqlConvertor.From("insert   into   Products   (   ...   )   values   (...)");  
  if(SqlConvertor.IsWrite){   //检查是否写入语句  
          if(SqlConvertor.Tables.Contains("products")){   //检查是否写入products表  
          }  
  }  
   
  由于可以进行严格限制,还可间接预防sql注入攻击,例如  
   
  SqlConvetor.IsMatchAction("select","products")   //检查是否符合select   *   from   product的行为,否则一律返回False  
   
  3.提供了子模块的数据库安全设定。如果我们的产品需要嵌入第三方组件,那么数据库安全显得较为重要,因为有可能我们不信任这一模块,却又不得不开放较高的数据库帐号让其访问。拥有sqlconvertor,我们可以实现同一个数据库帐号下的不同安全设定。  
   
  --------------------------------------------------------------------------------------  
  Require   for   comment   如果你有好的建议,欢迎说明,我会尽量在程序中加入有用的功能然后提供下载 问题点数:20、回复次数:40Top

1 楼marco08(天道酬勤)回复于 2006-11-10 23:51:34 得分 1

1Top

2 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-11-11 08:06:22 得分 1

2Top

3 楼laoliu666(鹅鹅鹅,曲项向天歌,白毛浮绿水,红掌拨清波。)回复于 2006-11-11 08:08:40 得分 1

3Top

4 楼laoliu666(鹅鹅鹅,曲项向天歌,白毛浮绿水,红掌拨清波。)回复于 2006-11-11 08:08:45 得分 1

4Top

5 楼laoliu666(鹅鹅鹅,曲项向天歌,白毛浮绿水,红掌拨清波。)回复于 2006-11-11 08:08:50 得分 1

5Top

6 楼xiao_deng()回复于 2006-11-13 17:19:53 得分 1

6Top

7 楼xiao_deng()回复于 2006-11-13 17:19:59 得分 1

7Top

8 楼FreedomLand()回复于 2006-11-13 19:54:20 得分 1

8Top

9 楼real_name(*真名)回复于 2006-11-13 20:14:41 得分 1

9Top

10 楼wcysgc()回复于 2006-11-13 20:53:04 得分 1

10Top

11 楼xuStanly(依依myLove)回复于 2006-11-15 11:45:15 得分 1

11Top

12 楼Ilovesport(大力神)回复于 2006-11-15 14:15:41 得分 1

12Top

13 楼coolingpipe(冷箫轻笛)回复于 2006-11-15 14:17:54 得分 1

13Top

14 楼oop80(RedSky)回复于 2006-11-15 14:25:38 得分 1

14Top

15 楼songyuan(松原)回复于 2006-11-15 16:50:56 得分 1

15Top

16 楼being21(民谣)回复于 2006-11-15 16:52:31 得分 1

16Top

17 楼tanxiangfeng(小刀)回复于 2006-11-17 17:24:07 得分 1

17Top

18 楼hinco(桃色德鲁依)回复于 2006-11-17 18:24:21 得分 1

18Top

19 楼happinessdepig(一步一步向前走!)回复于 2006-11-17 21:21:28 得分 1

19Top

20 楼cotory()回复于 2006-11-17 21:30:55 得分 1

20Top

21 楼sjh2003(风铃)回复于 2006-11-19 13:34:51 得分 0

21Top

22 楼fffddd(假钞换贞操)回复于 2006-11-19 13:36:48 得分 0

22Top

23 楼daishengs(横舟摆渡)回复于 2006-11-19 14:36:19 得分 0

23Top

24 楼jdsnhan(柳荫凉)回复于 2006-11-19 16:26:18 得分 0

24Top

25 楼chinawin2012()回复于 2006-11-21 15:39:07 得分 0

25Top

26 楼wcysgc()回复于 2006-11-21 15:45:25 得分 0

26Top

27 楼wcysgc()回复于 2006-11-21 15:45:40 得分 0

27Top

28 楼wcysgc()回复于 2006-11-21 15:45:53 得分 0

28Top

29 楼playwarcraft(时间就像乳沟,挤挤还是有的)回复于 2006-11-21 16:45:54 得分 0

让你的SQL也能实现全球通,生活更轻松,美女爱老公,关于sql转换器    
  --------------------------------------------------------------------  
   
  強烈不同意第2個豆號與第3個豆號之間的反革命言論!!Top

30 楼jixs0862()回复于 2006-12-05 11:28:19 得分 0

29Top

31 楼pgy8288(Just Coding)回复于 2006-12-08 11:49:16 得分 0

30Top

32 楼lovcal(枫兮)回复于 2006-12-08 12:08:40 得分 0

31Top

33 楼leo_lesley(leo)回复于 2006-12-08 12:09:53 得分 0

32Top

34 楼qw12cn()回复于 2006-12-08 16:02:34 得分 0

33Top

35 楼zhanghelpsgz(张和)回复于 2006-12-08 16:05:37 得分 0

1001Top

36 楼liu_87663663()回复于 2006-12-11 16:22:49 得分 0

1000000NTop

37 楼NinGO0(NinGoo的马甲)回复于 2006-12-11 16:24:54 得分 0

不是美女的就不爱老公了吗?Top

38 楼tanxiangfeng(小刀)回复于 2006-12-31 17:19:21 得分 0

x-->>>>>∝Top

39 楼zhangyaoting196()回复于 2007-01-02 22:10:14 得分 0

靠,不排号了!!!!!!!!!!!!!!!!!Top

40 楼galant2008(無賴)回复于 2007-01-03 08:35:16 得分 0

aTop

相关问题

关键词

得分解答快速导航

  • 帖主:jam123
  • marco08
  • wangtiecheng
  • laoliu666
  • laoliu666
  • laoliu666
  • xiao_deng
  • xiao_deng
  • FreedomLand
  • real_name
  • wcysgc
  • xuStanly
  • Ilovesport
  • coolingpipe
  • oop80
  • songyuan
  • being21
  • tanxiangfeng
  • hinco
  • happinessdepig
  • cotory

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo