让你的SQL也能实现全球通,生活更轻松,美女爱老公,关于sql转换器
自从这个世界蛋生了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




