热门搜索:   ASP.Net教程   前端开发   etl 工具   sql server 2008   .net 3.5   c#教程   SEO优化   visual studio 2010   ASP.Net 4.0教程   网站安全   ASP.Net MVC 入门视频教程   silverlight 教程   dhl   网站模板-dhl快递
ASP.Net教程
欢迎光临Elock Wong的博客。ASP.Net教程,为您开启WEB编程之门!从基础知识到实例教程,从PDF文档到视频教程,循序渐进地引导大家步入ASP.Net的殿堂。众多的面试题、源码资料、软件下载;近期还推出Ajax 、MVC 和CMS系统教程。相信教程的力量!

  第一,就是数据的转换,也是最重要、最值得注意的一部。由于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”。

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

posted on 2009-09-02 16:20  ASP.Net 4.0教程  阅读(320)  评论(0编辑  收藏  举报

Loading
DHL新闻,将对中国至美国航线DHL,在春节期间DHL中文主页可以办理快递吗,DHL公益关注贫困地区青少年教育,问题DHL装备环保,发动机DHL在中国,内陆DHL网站图片举例,说明代理报关DHL等,知名快递DHL的客服,电话DHL门店
回到顶部