代码改变世界

服务器SQl2000和SQl2005版本不同带来一系列问题解决方案

2009-09-12 19:31  chenkai  阅读(2675)  评论(0编辑  收藏  举报
最近实施一个中型的门户网站,在项目编码已经结束测试完成后,发布服务器上,因为以前用到只有SQl2000,当前基于开发的SQL2005+VS2008,环境是.NET 3.5版本,这个时候就出现许多问题.一一描述并提供解决方案:

A:版本问题—这是你第一个必须面对的并且是核心问题:
因为在实施中用到Row_Number()函数进行简单的数据分页,很明显只有SQl2005以上版本才支持,首先让我们来看看数据库版本的具体划分:
版本获得方法如下:
 1--获得当前数据库版本方法:
 2A:Select @@Version —返回当前数据版本号(微软定义)
 3--完整获得版本信息
 4B:SELECT  SERVERPROPERTY('productversion'), SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition')
 5上述获得完整版本信息:
 6
 7(1)产品版本编号('productversion')(例如:9.00.1399.06 或者8.00.534)
 8(2)产品级别('productlevel')(例如:RTM正式版)
 9(3)版本('edition')(例如:Enterprise Edition-企业版)
10
SQL2000版本号查询结果:

SQl2005版本号查询结果:

在微软官方上看到版本区分如下:SQL2000和SQL2005版本号对比如下:
   
安装SQL2005时如果具有引导程序问题不大,如果压缩包中只是Server和Tools文件夹时:需要注意安装顺序非常重要,应该首先安装Tools目录下然后在安装Server目录服务器引擎,如果只安装Tools客户端工具,没有安装Server目录下数据引擎情况下,会导致sql2005默认链接的是SQL2000数据引擎也就是8.0版本,导致Row—Nummber等函数不支持的现象发生.问题关键是安装SQL 9.0版本数据库引擎既Server目录下,并重新生成一个新的数据库实例而非默认实例:

这样做主要目的是在SQlClint容易区分不同版本下不同的数据库实例,链接时取新建立的数据库实例引擎,执行T—SQL语句正确执行,查看版本是9.0,这点是很有必要,如果SQL语句出现不可预料的错误,数据引擎版本问题是很隐蔽而关键的问题,这也是我不断在前面不断区分和识别数据版本的用心所在。
安装完SQL2005后,开始准备用SQL2000客户端工具连接SQL2005,结果报告不能用SQL2000客户端工具连接,只能用SQL2005客户端工具连接,后证明SQL2005客户端工具可以同时连接SQL2000和SQL2005。

B:多版本下链接数据库
当数据库建立后另外一个问题就是多版本下链接数据库:其实在同一台机器上同时安装多个版本的数据包括orcal理论上都是可以的,
1--默认链接字符串
2public static readonly string connString = "Data Source=.;Initial Catalog=IssueDB;Uid=sa;Pwd=chen";//可以通过配置文件读取,请查MSDN
如上链接会报错的,因为先安装的SQL2000后装上SQL2005,DataSource通过.默认来指向的是SQL2000数据库引擎,回报出无法找到IssueDB这个数据库对象,同样默认数据库通信端口1433也被SQL2000占用,后来通过官方资料证明:SQL2000服务器用的端口始终是1433端口,而SQL2005使用的是动态端口,
在多版本下建立SQl2005一个新的数据库实例后,鉴于项目需要建议开辟新的通信端口,链接字符窜写法如下:
1--开辟一个新端口(当然在使用前应测试该端口是否被占用)连接字符窜
2public static readonly string connString = "Data Source=5A40BDACC26449F\\SQLEXPRESS:5048;Initial Catalog=IssueDB;Integrated Security=True";
3
4//5048为新开辟端口
5
6
SQl2005配置步骤如下:
(1):在 "程序—>配置工具—>SQlServer配置管理器"运行起来:选择SQl Native Client配置下客户端协议 如图显示:

(2)选中Tcp/ip选择属性配置 截图如下:

修改完成后需要重新关闭再次启动SQlserver服务配置才有效,通过程序连接数据库SQl2005,链接正常.

无觅相关文章插件,快速提升流量