Access数据库怎么改成SQLServer数据库
本篇内容主要讲解“Access数据库怎么改成SQLServer数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Access数据库怎么改成SQLServer数据库”吧!
创新互联主营新民网站建设的网络公司,主营网站建设方案,重庆APP开发,新民h5小程序定制开发搭建,新民网站营销推广欢迎新民等地区企业咨询
一、改写前提:
系统已经安装好SQLServer2000并且打上了SP3补丁;安装好Office套件里面的Access;使用一个支持纯文本编辑并且带有行号显示的编辑器,推荐UltraEdit,当然也可以使用FrontPage2003,不过以前的版本行号显示不太好用。
个人能力要求:会基本的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)假如你要用一个ForSQL的程序,里面用到了存储过程,那么你应该有这个程序本身建立SQL数据库的方法:有其本身的SQL数据库文件,或者sql脚本;假如没有的话,采用导入access数据库的方式是无法建立存储过程的,这样你最好放弃这个ForSQL的程序版本,使用同样版本的ForAccess的程序,导入access数据库,然后用下面的改写方法自己改成SQL版本的程序。
三、连接字符串的改写
可参考动网的这段,分别是针对access和SQL的
DimConnStrIfIsSqlDataBase=1Then'sql数据库连接参数:数据库名、用户密码、用户名、连接名(本地用local,外地用IP)DimSqlDatabaseName,SqlPassword,SqlUsername,SqlLocalNameSqlDatabaseName="dvbbs7"SqlPassword=""SqlUsername="dvbbs"SqlLocalName="(local)"ConnStr="Provider=Sqloledb;UserID="&SqlUsername&";Password="&SqlPassword&";InitialCatalog="&SqlDatabaseName&";DataSource="&SqlLocalName&";"Else'免费用户第一次使用请修改本处数据库地址并相应修改data目录中数据库名称,如将dvbbs6.mdb修改为dvbbs6.aspDb="data/fengerqingqing.mdb"ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath(db)EndIfOnErrorResumeNextSetconn=Server.CreateObject("ADODB.Connection")conn.openConnStr当然你使用SQL的话,有关access的使用语句可以删除,就是else后面到onerrorresumenext前面,变成这样:DimConnStr'sql数据库连接参数:数据库名、用户密码、用户名、连接名(本地用local,外地用IP)DimSqlDatabaseName,SqlPassword,SqlUsername,SqlLocalNameSqlDatabaseName="dvbbs7"SqlPassword=""SqlUsername="dvbbs"SqlLocalName="(local)"ConnStr="Provider=Sqloledb;UserID="&SqlUsername&";Password="&SqlPassword&";InitialCatalog="&SqlDatabaseName&";DataSource="&SqlLocalName&";"OnErrorResumeNextSetconn=Server.CreateObject("ADODB.Connection")conn.openConnStr
也可以简洁一些,写成这样:
Setconn=Server.CreateObject("ADODB.Connection")conn.open"Provider=Sqloledb;UserID=sa;Password=1234567;InitialCatalog=dvbbs7;DataSource=(local);"
里面的数据库名称、数据源、用户、密码根据自己的实际情况改写一下。
ASP网站Access数据库改成SQLServer数据库怎么实现
四、程序的改写
这也有两种情况:
1、假如你幸运,拿到的是ForSQL的程序,那么假如上面的数据库建立过程没有遇到麻烦,程序基本上就可以运行了,出错的话,只是程序本身的bug,如何修改不是这个帖子讨论的内容,就不赘述了。
2、大多数情况,程序本身是ForAccess的,与ForSQL的程序差别主要是程序中使用到的SQL查询语句。注意,SQL查询语句是数据库应用不可缺少的部分,不管是ForSQL还是ForAceess的程序使用的语法大体差不多,但是有一些微妙的差别,正是这些差别,造成了程序的不通用,也是我们需要修改的主要内容。这样一般要修改的部分如下:
(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(nameisnull)
(4)真假值判断:access中可以用=true、=false来判断,但是在SQL中就会出错,因此在SQL查询或执行语句中这类判断要分别改成=1、=0。注意一点:有些程序虽然写成=“true”,但是由于有引号,所以这个字段是字符类型的,你不能改成=1,保持原样即可。
以上是比较常见的改写的地方,还有一些不太常见,假如遇到了可以在此回帖讨论。
五、程序的调试
前面推荐使用带有行号的编辑器,是因为上述的改写不大可能是直接搜索程序源码来做,很难找全。
我采取的方式一般这样:数据库改写完成,直接调试程序,出错后,看看出错的提示,找到相应文件的代码行,但是根源往往不是那行,比如出错的语句是:conn.execute(sql),但是这句本身是没有错的,错误原因是里面的这个sql字符串,那就向上看这个sql字符串是如何生成的,按照上面所说的程序修改办法修改。
数据库导入以后,自动增加字段需要重写,所有的数字类型需要增加长度,最好用decimal。
所有的默认值都丢失了。主要是数字类型和日期类型。
所有now(),time(),date()要改成getdate()。
所有datediff('d',time1,time2)要改成datediff(day,time1,time2)
有可能一些true/false类型不能使用,要变为1/0。
备注类型要通过cast(columnasvarchar)来使用。
CursorType要改成1,也就是打开数据库时要给出第一个数字参数为1,否则记录可能显示不完整。
isnull(rowname)要改成rowname=null
ACCESS的数据库中的自动编号类型在转化时,SQLServer并没有将它设为自动编号型,我们需在SQL创建语句中加上identity,表示自动编号!
转化时,跟日期有关的字段,SQLServer默认为smalldatetime型,我们最好将它变为datetime型,因为datetime型的范围比smalldatetime型大。有时用smalldatetime型时,转化失败,而用datetime型时,转化成功。
对此两种数据库进行操作的sql语句不全相同,例如:在对ACCESS数据库进行删除纪录时用:"delete*fromuserwhereid=10",而对SQLSERVER数据库进行删除是用:"deleteuserwhereid=10".
日期函数不相同,在对ACCESS数据库处理中,可用date()、time()等函数,但对SQLServer数据库处理中,只能用datediff,dateadd等函数,而不能用date()、time()等函数。
在对ACCESS数据库处理中,sql语句中直接可以用一些VB的函数,像cstr()函数,而对SQLServer数据库处理中,却不能用。
到此,相信大家对“Access数据库怎么改成SQLServer数据库”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
分享文章:Access数据库怎么改成SQLServer数据库
文章分享:http://hbruida.cn/article/jgpsco.html