【asp源码栏目提醒】:网学会员为广大网友收集整理了,ACCESS转MSSQL中程序要注意的问题 - 计算机教材,希望对大家有所帮助!
ACCESS转MSSQL中程序要注意的问题 作者佚名 文章来源本站原创 点击数126 更新时间2009-11-11 11:39:33 文 章来源 i p 12 6.com ACCESS转MSSQL中程序要注意的问题 程序由ac转sql总结了一下这三个程序转换中遇到的问题归纳了以下注意点 自动增加字段需要重写。
在access中经常使用的自动编号字段导入到mssql后他并不是自增型的int需要手工设置把导入后的自动编号字段的标识的“否”改为“是”“种子”和“递增量”都为“1”才能成为自动编号 所有的默认值都丢失了。
主要是数字类型和日期类型 所有nowtimedate要改成getdate 所有datediffd time1 time2要改成datediffday time1 time2 所有datediffww time1 time2要改成datediffweek time1 time2 所有datediffn time1 time2要改成datediffminute time1 time2 在mssql server中有许多保留字在access中是没有的当你把数据导入到mssql的时候问题就出来了。
mssql在导入的时候会自动给这些字段包括数据库中的表名加上“字段名”因此你必须修改你的脚本把相应的字段名字或者表名字加上中括号或改变字段名字为不是mssql的保留字 在用access关于时间的使用大家喜欢使用“select from aaaa while timequotampnow”这样的sql语句然而在mssql中没有“now”这个函数而是使用“getdate”所以所有的sql语句中的“now”必须换成“getdate”。
日期函数不相同在对ACCESS数据库处理中可用date、time等函数但对 SQL SERVER数据库处理中只能用datediffdateadd等函数而不能用date、time等函数。
转化时跟日期有关的字段SQL SERVER默认为smalldatetime型我们最好将它变为datetime型因为datetime型的范围比smalldatetime型大。
有时用smalldatetime型时转化失败而用datetime型时转化成功 isnullrowname要改成rowname null CursorType要改成1也就是打开数据库时要给出第一个数字参数为1否则记录可能 显示不完整 备注类型要通过castcolumn as varchar来使用 true/false类型不能使用要变为1/0 对此两种数据库进行操作的sql语句不全相同例如在对ACCESS数据库进行删除纪录时用quotdelete from user where id10quot而对SQL SERVER数据库进行删除是用quotdelete user where id10quot. 在对ACCESS数据库处理中sql语句中直接可以用一些VB的函数像cstr函数而对SQL SERVER数据库处理中却不能用 在access的sql语句中的时间使用变量查询的时候大家一般使用quotselect from aaaa while timequotamp变量名ampquotquot在mssql中是不行的他的语法是“select from aaaa while timequotamp变量名ampquotquot”。
意思是让你把日期时间变量当成字符串来使用呵呵 原来
ASP里的“Delete FROM ????”要改为“Delete FROM ????” 有可能rs.update失败修改成update 表名 set 字段‘值’ 这样通过遇到的情况提示为 Microsoft OLE DB Provider for SQL Server 错误 80040e38 乐观并发检查失败。
已在此游标之外修改了该行。
/Admin_ClassOrder.
asp行 164 access里面除法可以使用quotquot或者quot/quotMSSQL里面只能使用quot/quot 日期部分 缩写 year yy yyyy quarter qq q Month mm m dayofyear dy y Day dd d Week wk ww Hour hh minute mi n second ss s millisecond ms Access与Sql Server之
ASP代码比较 后台数据库 Microsoft Access 与 Microsoft Sql Server 更换之后
ASP代码应注意要修改的一些地方 一连接问题举例 Microsoft Access constr quotDBQc:dataclwz.mdb DRIVERMicrosoft Access Driver .mdbquot Microsoft Sql Server constr quotDRIVERSQL ServerSERVERhostDATABASEmydatauidsapwdquot 二相似函数举例 1DATEDIFFdatepart startdate enddate 其中“datepart”参数可选项如下 设置 描述 ———————————— Microsoft Access 年 yyyy 季度 q 月 m 一年的日数 y 日 d 一周的日数 w 周 ww 小时 h 分钟 n 秒 s Microsoft Sql Server year yy yyyy quarter qq q month mm m dayofyear dy y day dd d week wk ww hour hh minute mi n second ss s millisecond ms ------------------------- 基本上差不多但注意的是在写的时候 Microsoft Access要加引号如datediffdenddate2004/08/01 Microsoft Sql Server则不需要如datediffdenddate2004/08/01 2Microsoft Access中可用如cstr等转数据类型函数而 Microsoft Sql Server中则用convert或cast函数如 convertvarcharamount等。
3Microsoft Sql Server 取当前时间用getdate等等... 三语句 Microsoft Sql Server 可以用 CASE WHEN THEN WHEN THEN ... ELSE END 语句而 Microsoft Access 不支持。
Microsoft Access也不支持between语句 Microsoft Sql Server则可以这样写 date between date1 and date2 四查询表 Microsoft Sql Server 可三个及以上表join查询而 Microsoft Access 好像只能两个表联接查询待权威确认 而且Microsoft Sql Server可用“”和“”连接符。
五除零问题 Microsoft Access 在碰到除数为零时自动丢掉相关记录而 Microsoft Sql Server 则会报错且查询中止。
删除代码 Microsoft Access 可以这样写delete from table Microsoft SQL Server 只能这样写delete from table 多会报错 _____________________________________ 当前日期 Microsoft Access 用date Microsoft SQL Server 用getdate如果数据库可能会更换类型的话可以 在
ASP代码中加上如这样 if inStrconstrquotMicrosoft Accessquot gt 0 then sqlstrMicrosoft Accesssql代码 else sqlstrMicrosoft Sql Serversql代码 end if constr--连接字符串 这样即使改了数据库也不用改数据库查询更新代码了。
再加access中有true、false的字段记录而sql里只有smallint对应如果在access里有“字段名true”的在sql里要改成“字段名1” 网上大部分的免费
asp程序使用的是access数据库。
但是access数据库作为一个中小型的单机数据库系统在承担访问量、数据量大的网站应用时往往就不堪重负了。
一般认为超过50M的access数据库性能就开始明显下降超过100M以后出错、运行慢的问题会更加突出。
尽管可以如动网7.0以后那样从程序的角度尽量优化以图提高性能但是不能从根本上解决问题。
这时也许使用微软的SQL Server数据库就是最可能的办法当然也可以使用其它的如Oracle、MySQL等等但是作为改写来说由于同为微软的产品改写成SQL Server应该是最省力的办法。
一、改写前提 系统已经安装好SQL Server2000并且打上了SP3补丁安装好Office套件里面的Access使用一个支持纯文本编辑并且带有行号显示的编辑器推荐Ultra Edit当然也可以使用FrontPage2003不过以前的版本行号显示不太好用。
个人能力要求会基本的
asp语法、access数据库的操作、SQLServer企业管理器的基本操作。
二、数据库的准备 一般来说有两种情况 1、程序提供了SQL数据库格式有一个MDF文件或者提供了创建SQL数据库的SQL脚本文件后缀名为.sql。
如果有mdf文件可以用企业管理器直接附加上如果提供的是sql脚本文件那么就先用企业管理器自己创建一个sql数据库然后数据库用企业管理器中的查询分析器运行这个脚本创建数据库表。
这样建立的数据库基本不用再去改写什么了。
2、更多的是没有提供SQL数据库或脚本文件的这时就要自己来做这一切了这也是我们这个帖子主要解决的问题。
一般这样的程序会提供一个access数据库这样你就用企业管理器导入access数据库导入后需要改写下面一些东西 对照原来的access改写下面的部分 1sql数据库表是没有自动字段的因此原来access中的自动字段被转换成了普通字段需要手工改成标识类型增量为1。
2所有的时间字段如果定义了默认值那么原来肯定是now需要改成getdate 3原来字段的默认值一般都不会自动引入需要对照原表的字段手工添加。
4由于数据库的不同access和sql的字段类型很多转换后就变化了比如原来的《是否》字段会被转换成bit或者int备注字段被转换成longtexttext字段转换成varchar等等一般来说不会影响程序运行如果有问题我们在下面的程序改写部分再说。
5如果你要用一个For SQL的程序里面用到了存储过程那么你应该有这个程序本身建立SQL数据库的方法有其本身的SQL数据库文件或者sql脚本如果没有的话采用导入access数据库的方式是无法建立存储过程的这样你最好放弃这个For SQL的程序版本使用同样版本的For Access的程序导入access数据库然后用下面的改写方法自己改成SQL版本的程序。
三、连接字符串的改写 可参考动网的这段分别是针对access和SQL的 Dim ConnStr If IsSqlDataBase 1 Then sql数据库连接参数数据库名、用户密码、用户名、连接名本地用local外地用IP Dim SqlDatabaseNameSqlPasswordSqlUsernameSqlLocalName SqlDatabaseName quotdvbbs7quot SqlPassword quotquot SqlUsername quotdvbbsquot SqlLocalName quotlocalquot ConnStr quotProvider Sqloledb User ID quot amp SqlUsername amp quot Password quot amp SqlPassword amp quot Initial Catalog quot amp SqlDatabaseName amp quot Data Source quot amp SqlLocalName amp quotquot Else 免费用户第一次使用请修改本处数据库地址并相应修改data目录中数据库名称如将dvbbs6.mdb修改为dvbbs6.
asp Db quotdata/fengerqingqing.mdbquot ConnStr quotProvider Microsoft.Jet.OLEDB.4.0Data Source quot amp Server.MapPathdb End If On Error Resume Next Set conn Server.CreateObjectquotADODB.Connectionquot conn.open ConnStr 当然你使用SQL的话有关access的使用语句可以删除就是else后面到on error resume next前面变成这样 Dim ConnStr sql数据库连接参数数据库名、用户密码、用户名、连接名本地用local外地用IP Dim SqlDatabaseNameSqlPasswordSqlUsernameSqlLocalName SqlDatabaseName quotdvbbs7quot SqlPassword quotquot SqlUsername quotdvbbsquot SqlLocalName quotlocalquot ConnStr quotProvider Sqloledb User ID quot amp SqlUsername amp quot Password quot amp SqlPassword amp quot Initial Catalog quot amp SqlDatabaseName amp quot Data Source quot amp SqlLocalName amp quotquot On Error Resume Next Set conn Server.CreateObjectquotADODB.Connectionquot conn.open ConnStr 也可以简洁一些写成这样 Set conn Server.CreateObjectquotADODB.Connectionquot conn.open quotProvider Sqloledb User ID sa Password 1234567 Initial Catalog dvbbs7 Data Source localquot 里面的数据库名称、数据源、用户、密码根据自己的实际情况改写一下。
四、程序的改写 这也有两种情况 1、如果你幸运拿到的是For SQL的程序那么如果上面的数据库建立过程没有遇到麻烦程序基本上就可以运行了出错的话只是程序本身的bug如何修改不是这个帖子讨论的内容就不赘述了。
2、大多数情况程序本身是For Access的与For SQL的程序差别主要是程序中使用到的SQL查询语句。
注意SQL查询语句是数据库应用不可缺少的部分不管是For SQL还是For Aceess的程序使用的语法大体差不多但是有一些微妙的差别正是这些差别造成了程序的不通用也是我们需要修改的主要内容。
这样一般要修改的部分如下 1时间函数的问题SQL数据库的时间函数与access不同最常见的是取现在时间的函数access是nowSQL是getdate。
因此凡是在where子句中使用了now的地方都要改成getdate注意now函数在
asp程序本身也要使用凡是不在数据库查询或执行语句中使用的now函数千万不要改。
2时间比较函数datediffd时间1‘时间2’这是access查询用的格式SQl中这些引号都要去掉同时时间格式的前后可能加上了这也要去掉。
同样这也是指在sql语句中的在
asp语句中的要保持原样。
3空值的表示在access中判断空值一般用是否quotquot来表示但是这在SQL中往往出错如果遇到出错的问题或者程序运行不正常可以改成如这样判断where name is null 4真假值判断access中可以用true、false来判断但是在SQL中就会出错因此在SQL查询或执行语句中这类判断要分别改成1、0。
注意一点有些程序虽然写成“true”但是由于有引号所以这个字段是字符类型的你不能改成1保持原样即可。
五、程序的调试 前面推荐使用带有行号的编辑器是因为上述的改写不大可能是直接搜索程序
源码来做很难找全。
我采取的方式一般这样数据库改写完成直接调试程序出错后看看出错的提示找到相应文件的代码行但是根源往往不是那行比如出错的语句是conn.executesql但是这句本身是没有错的错误原因是里面的这个sql字符串那就向上看这个sql字符串是如何生成的按照上面所说的程序修改办法修改。
数据库导入以后自动增加字段需要重写所有的数字类型需要增加长度最好用decimal。
所有的默认值都丢失了。
主要是数字类型和日期类型。
所有nowtimedate要改成getdate。
所有datediffd time1 time2要改成datediffday time1 time2 有可能一些true/false类型不能使用要变为1/0。
备注类型要通过castcolumn as varchar来使用。
CursorType要改成1也就是打开数据库时要给出第一个数字参数为1否则记录可能显示不完整。
isnullrowname要改成rowname null ACCESS的数据库中的自动编号类型在转化时sql server并没有将它设为自动编号型我们需在SQL创建语句中加上identity表示自动编号 转化时跟日期有关的字段SQL SERVER默认为smalldatetime型我们最好将它变为datetime型因为datetime型的范围比smalldatetime型大。
有时用smalldatetime型时转化失败而用datetime型时转化成功。
对此两种数据库进行操作的sql语句不全相同例如在对ACCESS数据库进行删除纪录时用quotdelete from user where id10quot而对SQL SERVER数据库进行删除是用quotdelete user where id10quot. 日期函数不相同在对ACCESS数据库处理中可用date、time等函数但对SQL SERVER数据库处理中只能用datediffdateadd等函数而不能用date、time等函数。
在对ACCESS数据库处理中sql语句中直接可以用一些VB的函数像cstr函数而对SQL SERVER数据库处理中却不能用。
下表比较了MicrosoftAccess数据库MicrosoftAccess数据库数据和对象如表、查询或窗体组成的集合与特定的主题或用途有关。
MicrosoftJet数据库引擎用于管理数据。
和MicrosoftAccess项目MicrosoftAccess项目与MicrosoftSQLServer数据库连接且用于创建客户/服务器应用程序的Access文件。
项目文件中不包含任何数据或基于数据定义的对象如表或视图。
的数据类型数据类型决定字段可拥有的数据类型的字段特征。
数据类型包括Boolean、Integer、Long、Currency、Single、Double、Date、String和Variant默认。
MicrosoftAccess数据类型SQLServer数据类型 是/否“是/否”数据类型一种字段数据类型用于只有两种可能值如是或否、True或False的字段。
不允许有Null值。
bitbit数据类型在Access项目中一种存储值为1或0的数据类型。
接受1和0以外的整数值但总是将其解释为1。
数字“数字”数据类型MicrosoftAccess数据库中的一种字段数据类型用于将在数学运算中使用的数值数据。
但是若要显示或计算货币值则应使用“货币”数据类型。
字节tinyinttinyint数据类型Access项目中的一种占一个字节8位的数据类型用于存储从0到255范围内的整数。
数字整型smallintsmallint数据类型Access项目中的一种2字节16位数据类型存储位于-215-32768与215-132767之间的数字。
数字长整型intint数据类型Access项目中的一种4字节32位数据类型存储位于-231-2147483648与231-12147483647之间的数字。
数字单精度浮点型realreal数据类型在Access项目中一种近似的数值数据类型精度为7位正值取值范围大致从1.18E-38到3.40E38负值取值范围大致从-1.18E-38到-3.40E38也可以取0。
无等价的数据类型bigintbigint数据类型Access项目中的一种8字节64位数据类型存储位于-263-9223372036854775808与263-854775807之间的数字。
数字双精度浮点型floatfloat数据类型在Access项目中一种近似的数值数据类型精度为15位。
它所存储的正值范围大致是从2.23E-308到1.79E308负值范围大致是从-2.23E-308到-1.79E308也可以为0。
货币“货币”数据类型MicrosoftAccess数据库中的一种数据类型用于与货币有关的计算或其精确度极其重要的定点计算。
moneymoney数据类型在Access项目中用于存储货币值的数据类型取值范围从-922337203685477.5707到922337203685477.5807精确度为万分之一个货币单位。
smallmoneysmallmoney数据类型Access项目中的一种存储货币值的数据类型取值范围从-214748.3648到214748.3647精确度为万分之一个货币单位。
当显示smallmoney值时会将它们四舍五入为两个小数位。
小数/数值decimal数据类型Access数据库精确的数值数据类型用于存储-1038-1到1038-1的值。
可以指定数值范围最大总位数和精度小数点右边的最大位数。
decimaldecimal数据类型Access项目精确的数值数据类型用于存储-1038-1到1038-1的值。
可以指定数值范围最大总位数和精度小数点右边的最大位数。
numericnumeric数据类型在Access项目中一种精确的数值数据类型取值从-1038-1到1038-1。
可以指定数值范围最大总位数和精度小数点右边的最大位数。
日期/时间“日期/时间”数据类型Access数据库的一种数据类型用来存放日期和时间信息。
datetimedatetime数据类型在Access项目中日期和时间的数据类型范围从1753年1月1日到9999年12月31日精确度为三百分之一秒即3.33毫秒。
smalldatetimesmalldatetime数据类型Access项目中的一种日期和时间数据类型精度不如datetime时间数据类型。
数据取值范围从1900年1月1日到2079年6月6日精确度为一分钟。
自动编号“自动编号”数据类型MicrosoftAccess数据库中的一种字段数据类型当向表中添加一条新记录时这种数据类型会自动为每条记录存储一个唯一的编号。
可以产生三种编号顺序号、随机号和同步复制ID。
递增intint数据类型Access项目中的一种4字节32位数据类型存储位于-231-2147483648与231-12147483647之间的数字。
定义了Identity属性 文本“文本”数据类型MicrosoftAccess数据库中的一种字段数据类型。
“文本”数据类型最多可以包含255个字符或者是由FieldSize属性指定的一个小一些的字符数。
nvarcharnvarcharn数据类型Access项目中的一种可变长度的数据类型最大长度为8000个ANSI字符。
nvarcharnnvarcharn数据类型在Access项目中一种可变长度的数据类型最多可含4000个Unicode字符。
Unicode字符每字符占两个字节而且支持所有国际字符。
备注“备注”数据类型在MicrosoftAccess数据库中的一种字段数据类型。
“备注”字段最多可以包含65535个字符。
texttext数据类型Access项目中的一种长度可变的数据类型最多可存储231-12147483647个字符默认长度为16。
OLE对象“OLE对象”数据类型字段的数据类型之一用于在其他应用程序中创.