ASP网站系统由Acess迁移SQL Server经验小结

  第一,就是数据的转换,也是最重要、最值得注意的一部。由于SQL Server 2000的DTS(data transfer service)不能完全的把Access的数据结构转换过来,比如“自动编号”、“默认值”、“=now()”等,如果数据结构不复杂的话,可以经过DTS后手动设计表,但如果有N个数据库,N个表,N个字段的时候,恐怕能累死你,这时候就要借助第三方转换软件了。国内外相关的数据库转换软件基本都尝试了,最后发现真正能够把数据、数据结构完整转换的只有“Full Convert Enterprise 4.0”,强烈推荐,它支持目前几乎所有的流行数据库的相互转换,支持Unicode,可惜目前没有破解版,国内用的人也寥寥无几,用它就不用在考虑“自动编号”、“默认值”、“逻辑型(bit)”、“=now()”等等一系列问题!地址:http://www.spectralcore.com/
  试用版,虽然能够转换数据结构,但数据是每隔几行,改为“***TRIAL VERSION***”,不过没关系,只要数据结构转过来就行了,吼吼。然后我们利用SQL Server 200自动生成该数据库的SQL脚本,删除刚才转换过来的数据库,重新利用生成的SQL建立新的数据库,然后再用DTS导入Access数据。
数据转换到此就大功告成了,接下来的就是改代码了,疯狂,这次我改动的代码过千处。改得我都要吐了

  第二,数据库连接代码需要改动,如果是用数据源方式连接的话,基本不需要改动,直接添加数据源就可以了。否则的话就用以下方式:
Dim SqlUsername,SqlPassword,SqlDatabaseName,SqlLocalName,ConnStr
SqlUsername = "" ’用户名(SqlUsername)
SqlPassword = "" ’用户密码(SqlPassword)
SqlDatabaseName = "" ’数据库名(SqlDatabaseName)
SqlLocalName = "(local)" ’(本地用local,外地用IP)
ConnStr = "Provider = Sqloledb; User ID = " & SqlUsername & "; Password = " & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source = " & SqlLocalName & ";"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.open ConnStr

  第三,SQL语句部分,Access的Jet-SQL和SQL Server的T-SQL有些地方不一样,这里给出比较常遇到的情况。
A:now()和getdate(),如果代码在asp里,无需改动;如果在SQL语句字串里,所有的now()要改成getdate()。
B:关键字,可能有些表里的字段是T-SQL的关键字,比如“update”、“time”等,在检索数据的时候需要加“[]”,否则有时候可能会出错。
如检索Access的时候是“SELECT * FROM TABLE WHERE update<getdate() ORDER BY time DESC”要改成“SELECT * FROM TABLE WHERE [update]<getdate() ORDER BY [time] DESC”
C:关于“备注型”,Access原来所有的“备注型”到SQL Server里就成了“ntext”或“text”;比较“ntext”类型的时候不能用“=”“<>”,需要改成“LIKE”。
如,原来Access里有个“备注型”字段:“content”,
按“content”检索:
“SELECT * FROM TABLE WHERE content=’ABC’”要改成“SELECT * FROM TABLE WHERE content LIKE ’ABC’”;
判断“content”是否为空:
原来是“SELECT * FROM TABLE WHERE content <>’’”要改成“SELECT * FROM TABLE WHERE content IS NOT NULL”
D:读不到值,刚添加一行数据,紧接着就读取此行某个有“默认值”或“自动编号”的值,例如有个表里“ID”是自动编号,“y”有默认值
Rs.Addnew
Rs("x1")=x1
Rs("x2")=x2
...
Rs("x9")=x9
’添加完毕
’接着读取自动编号的“ID”值和具有默认值的“y”
Y=Rs("y")
ID=Rs("ID")
原来在Access里这样是完全可以读取到“ID”和“y”的,但到SQL里不行,需要把游标定到刚添加的那一行,所以需要在“Rs("x9")=x9”后加句“Rs.MoveLast”
E:Rs.Recordcount返回“-1”,解决的方法就是在定义“Rs”后面加句“Rs.CursorLocation = 3”或在数据库连接“Conn”定义的后面加上“Conn.CursorLocation = 3”。

以上是网上牛人总结贴,转载而来!

转载于:https://www.cnblogs.com/elock/archive/2009/09/02/1558848.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值