自己的一个网站,之前一直使用ASP+ACCESS的组合。但access数据库的不足和弊端是显而易见的。近期,随着网站规模的扩大,对数据库的要求提高了,打算用MS SQL替换ACCESS数据库,上网查了一下,虽然有点小繁琐,但总体不是很难。于是决定实施,大致经历了本地个人电脑安装SQL Server 2008、用第三方工具转换ACCESS为MSSQL、ASP网站程序代码修改和本地调试、本地MSSQL数据库上传到虚拟主机远程数据库、ASP网站连接虚拟主机数据库及调试等阶段。其中,用第三方工具转换ACCESS为MSSQL、ASP网站程序代码修改和本地调试等环节比预想的要简单,遇到的问题不是很复杂,最终都顺利解决啦。
首先是SQL Server的安装,找到了这个网址可以下载:
http://www.asplog.com/html/bianchengkaifa/742.html,除了安装包还有序列号可用,我下载的是开发版,迅雷下载速度蛮快。然后是在我的个人电脑上安装,参考了下面这个网页:
http://www.downcc.com/tech/4135.html
最后顺利安装成功并打开主程序运行,不算前面的下载,从点击安装到成功运行,花费大概不到一小时。
第二步是将ACCESS数据库中的表转到SQL Server中。参考了下面这个网页:
https://blog.csdn.net/websph/article/details/5635649
使用CooSel2.0 CreateSQL V1.05这个第三方工具将数据导入到MSSQL中。下面是这个软件的文档说明:
我选择的是EXE版本,使用的是生成升迁SQL脚本,保存为*.sql这个功能,然后在查询分析器进行调用,就会自动建立起原ACCESS中的全部表。具体细节不在赘述。在上面那个网页中,还提到了,数据表转换后,有些字段需要手工调整的问题。主要涉及自动编号、真假型、时间日期等类型的数据。不过我在转换完成后,没发现上述类型的字段有问题,可能是网页中提到的MSSQL版本比较老的缘故吧,我猜MSSQL在新版本中增强了对access数据转换的支持力度,不兼容的问题减少了。
第三步是ASP网站程序代码修改。主要是由于MSSQL和ACCESS所使用的SQL语句会有区别。这个就需要你在本地运行网站程序,逐个打开那些动态ASP页面,查看是否报错,出错在第几行,然后相应的修改。遇到问题比较多的有如下几种SQL语句:
①ACCESS中SQL语句对真假型字段一般会写“aa=true”这个表达式,而在MSSQL中必须要换成“aa=1”这样的写法,否则会出错。false的话就对应0;②再比如:access中SQL的删除语句是“delete * from 表名 where……”,而在MSSQL中,需要把*去掉,直接写“delete from 表名 where……”;③MSSQL不支持在SQL语句中使用VBscript函数,比如在where后面判断某个字段是否包含某个字符串,我们可以用:“where instr(aa,"abcd")>0”,使用了instr这个字符串包含的函数,但在MSSQL中是不允许的。可以用“where aa like ‘%abcd%’”这个语句来代替。
经过对前台和后台的动态网页进行逐个测试后,排除了能够主动发现的所有不兼容的SQL语句,第三步就算完成了。
第四步是将本地MSSQL数据库上传到虚拟主机远程数据库。这个步骤对我而言,也是初次探索。因为以前的网站数据库都是access的,直接以FTP上传到服务器即可。这与mysql、mssql等主流的数据库不太一样,access的数据库以普通文件(*.mdb)的形式存放在文件系统中,不涉及到单独进行数据库的连接和管理。
在这个步骤,我打开我自己的虚拟主机管理后台,找到了购买时相配套的数据库,主要需要数据库的主机IP,数据库的名称、数据库用户名,数据库用户密码等几项。这些都是你在购买虚拟主机或数据库的时候自己设置或默认给出的。找到这些项目后,然后在本地MSSQL中打开需要上传到远程的那个数据库(就是你的网站数据库)。右击数据库名称,选择“任务”—“导出数据”(下图鼠标位置有误,应该是下面的导出数据)
连接对象管理器。
然后在窗口中输入虚拟主机后台中找到的数据库IP、用户名和密码。
打开向导,先选择本地数据源,选择好需要导出的数据库
点击下一步,然后需要选择和设置导入的目标数据库。服务器名称这里,填写虚拟主机后台提供的数据库IP地址,身份验证这里,选择sql server验证,输入虚拟主机后台提供的数据库用户名和密码,然后数据库选择虚拟主机后台的数据库名称。
然后点击下一步,提示你要导出哪些数据表,选择后就会开始进行数据传输,最终会出现结果,告诉你传了那几张表,每张表分别完成了多少条记录。这时,你的数据库已经成功上传到IDC的数据库中,可以用网站去连接这个数据库了。
第五步是修改网站的数据库连接语句。这里有个小插曲,一开始我在本地电脑调试时,用了下面的语句可以成功连接数据库进行一切访问和增删改操作:
Set conn=server.CreateObject("adodb.connection")
connstr="Driver={SQL Server};server=(local);uid=wode;pwd=454654;database=oppo;"
conn.open connstr
但在远程网站服务器,按照这个格式修改连接语句,总是出错,无法成功连接数据库。一开始我以为会是服务器端口配置的问题,后来发现不是,最后用了下面这种连接语句方式才得以成功连接。
Set conn=server.CreateObject("adodb.connection")
connstr="Provider=SQLOLEDB;server=205.172.29.151;database=oppo;uid=wode;pwd=454654"
conn.open connstr
——————————————————————
新增内容:在这篇文章完成后,在网站后台操作时又遇到了新问题,即SQL数据表从本地导出到远程服务器后,发生了主键丢失的情况,每张表都是如此。之前在access中每个表有一个自动编号类型的字段,一般命名为“id”,作为整个表的主键,在新增记录时,这个字段会自动加1。因此,还需要手动对每张表进行设置主键,以及设置标识规范为“是”的操作。此处的“标识规范”意思就是自动编号字段。