ACCESS转成SQL
网上大部分的免费asp程序使用的是access数据库。但是access数据库作为一个中小型的单机数据库系统,在承担访问量、数据量大的网站应用时,往往就不堪重负了。一般认为,超过50M的access数据库性能就开始明显下降,超过100M以后,出错、运行慢的问题会更加突出。尽管可以如动网7.0以后那样,从程序的角度尽量优化以图提高性能,但是不能从根本上解决问题。
这时也许使用微软的SQL
一、改写前提:
系统已经安装好SQL
个人能力要求:会基本的asp语法、access数据库的操作、SQLServer企业管理器的基本操作。
二、数据库的准备
一般来说有两种情况:
1、程序提供了SQL数据库格式:有一个MDF文件,或者提供了创建SQL数据库的SQL脚本文件(后缀名为.sql)。
如果有mdf文件,可以用企业管理器直接附加上,如果提供的是sql脚本文件,那么就先用企业管理器自己创建一个sql数据库,然后数据库用企业管理器中的查询分析器运行这个脚本创建数据库表。
这样建立的数据库基本不用再去改写什么了。
2、更多的是没有提供SQL数据库或脚本文件的,这时,就要自己来做这一切了,这也是我们这个帖子主要解决的问题。一般这样的程序会提供一个access数据库,这样你就用企业管理器导入access数据库,导入后需要改写下面一些东西:
对照原来的access,改写下面的部分:
(1)sql数据库表是没有自动字段的,因此原来access中的自动字段被转换成了普通字段,需要手工改成标识类型,增量为1。
(2)所有的时间字段,如果定义了默认值,那么原来肯定是now(),需要改成getdate()
(3)原来字段的默认值一般都不会自动引入,需要对照原表的字段手工添加。
(4)由于数据库的不同,access和sql的字段类型很多转换后就变化了,比如原来的《是否》字段会被转换成bit或者int,备注字段被转换成longtext,text字段转换成varchar等等,一般来说不会影响程序运行,如果有问题,我们在下面的程序改写部分再说。
(5)如果你要用一个For
三、连接字符串的改写
可参考动网的这段,分别是针对access和SQL的
Dim
If
\'sql数据库连接参数:数据库名、用户密码、用户名、连接名(本地用local,外地用IP)
Dim
SqlDatabaseName
SqlPassword
SqlUsername
SqlLocalName
ConnStr
Else
\'免费用户第一次使用请修改本处数据库地址并相应修改data目录中数据库名称,如将dvbbs6.mdb修改为dvbbs6.asp
Db
ConnStr
End
On
Set
conn.open
当然你使用SQL的话,有关access的使用语句可以删除,就是else后面到on
Dim
\'sql数据库连接参数:数据库名、用户密码、用户名、连接名(本地用local,外地用IP)
Dim
SqlDatabaseName
SqlPassword
SqlUsername
SqlLocalName
ConnStr
On
Set
conn.open
也可以简洁一些,写成这样:
Set
conn.open
里面的数据库名称、数据源、用户、密码根据自己的实际情况改写一下。
四、程序的改写
这也有两种情况
1、如果你幸运,拿到的是For
2、大多数情况,程序本身是For
(1)时间函数的问题:SQL数据库的时间函数与access不同,最常见的是取现在时间的函数,access是now(),SQL是getdate()。因此凡是在where子句中使用了now()的地方都要改成getdate();注意,now()函数在asp程序本身也要使用,凡是不在数据库查询或执行语句中使用的now()函数千万不要改。
(2)时间比较函数:datediff(\'d\',\'时间1\',‘时间2’)这是access查询用的格式,SQl中这些引号都要去掉,同时时间格式的前后可能加上了#,这也要去掉。同样这也是指在sql语句中的,在asp语句中的要保持原样。
(3)空值的表示:在access中,判断空值一般用是否=""来表示,但是这在SQL中往往出错,如果遇到出错的问题或者程序运行不正常,可以改成如这样判断:where
(4)真假值判断:access中可以用=true、=false来判断,但是在SQL中就会出错,因此在SQL查询或执行语句中这类判断要分别改成=1、=0。注意一点:有些程序虽然写成=“true”,但是由于有引号,所以这个字段是字符类型的,你不能改成=1,保持原样即可。
了解更多请访问:http://www.ndfweb.cn/news-334.html