从经典 ASP 连接到 SQL Server 2008 的命名实例

4

我的ASP应用程序可以轻松连接到安装有SQL Server 2000的网络服务器。旧代码如下:

myConn.Open ("Driver={SQL Server};
              Server=myNetwrkServer;
              Database=myDB;
              UID=myID;PWD=myPWD;Trusted_Connection=NO;")

在同一网络服务器上安装了SQL Server 2008实例。新代码无法正常工作:

myConn.Open ("Driver={SQL Server Native Client 10.0};
                      Server=myNetwrkServer\SQLServ2008;
                      Database=myDB;
                      UID=myID;PWD=myPWD;Trusted_Connection="NO";)

Please help!


我在使用ASP Classic连接到一个非默认SQL端口的远程位置时,从Win2003服务器上遇到了很大的麻烦。想知道SQL2008 Express是否需要升级(到R2)才能与ASP Classic一起工作,或者这些版本在这方面是否相似? - BerggreenDK
我没有看到任何一个答案告诉我关于通过WAN/IP连接的非默认SQL端口的任何信息。因此,我的问题仍未解决,所以我无法为赏金标记任何人。 - BerggreenDK
7个回答

10

命名实例需要启用并启动SQL Server Browser Service。如果您的myNetwrkServer机器上未启动此服务,则来自网络的连接将失败,因为它们将无法将实例名称解析为实际的监听端口。

第二个问题是您更改了驱动程序为{SQL Server Native Client 10.0}。这要求您在ASP机器上安装SQL Server 2008本机驱动程序。没有理由更改驱动程序,您应该将驱动程序保留为旧的{SQL Server},让OleDB为您解决低级别的连接驱动程序。通过指定本机驱动程序甚至版本号,您正在指定底层连接堆栈,即使它能工作,它也会在升级到SQL Server 2008 R2时出现错误。只需将其保留为通用的{SQL Server},并让驱动程序管理器找出详细信息即可。

最后,您需要确保在新服务器上定义了登录名/密码。

作为一般规则,“新代码不起作用”从来都不是您应该在请求帮助时提出的东西。始终说明不起作用的方式。您是否收到异常或错误?是什么异常,什么信息?帮助您并不必成为一部神秘小说。


8

您在该行末尾使用了不匹配的引号。

应该看起来像这样:

myConn.Open ("Driver={SQL Server Native Client 10.0};
                      Server=myNetwrkServer\SQLServ2008;
                      Database=myDB;
                      UID=myID;PWD=myPWD;Trusted_Connection=NO;")

2
Trusted_Connection="NO";)

看起来用双引号将值括起来会使事情变得混乱。

可以尝试以下写法:

("Driver={SQL Server Native Client 10.0};Server=myNetwrkServer\SQLServ2008;Database=myDB;UID=myID;PWD=myPWD;Trusted_Connection="NO";)

看起来你应该有:

("Driver={SQL Server Native Client 10.0};Server=myNetwrkServer\SQLServ2008;Database=myDB;UID=myID;PWD=myPWD;Trusted_Connection=NO;")

1

看起来你的Trusted_Connection参数没有正确地终止连接字符串。

考虑完全删除Trusted_Connection,或确保你不要将NO放在引号中。

myConn.Open ("Driver={SQL Server Native Client 10.0};Server=myNetwrkServer\SQLServ2008;
                Database=myDB;UID=myID;PWD=myPWD;Trusted_Connection=NO;")

在 ; 后仍然缺少一个引号。 - Eton B.

1

就像其他人所说,引号不匹配。但是,你不应该需要信任连接位。你可以使用UID=PWD=,或者Trusted_Connection=yes。你不需要同时使用所有属性。

这应该可以正常工作:

myConn.Open ("Driver=SQLNCLI10; 
              Server=myNetwrkServer\SQLServ2008; 
              Database=myDB; 
              UID=myID;
              PWD=myPWD;") 

1

这是我在任何网络应用程序无法连接到新的SQL Server时要遵循的检查清单(有些点已经被提到):

  1. 检查SQL Server是否启用了SQL和Windows身份验证(默认安装选项仅为Windows身份验证)
  2. 检查SQL Server Browser服务是否已启用并运行(默认安装选项未激活)
  3. 检查您的SQL Server实例是否启用了TCP/IP连接(默认情况下通常禁用)
  4. 检查服务器防火墙是否允许连接到SQL Server和SQL Server Browser(最近,这经常是一个问题)
  5. 检查在新的SQL Server上是否存在与数据库中定义的数据库用户相同的登录凭据
  6. 如果您将数据库从另一台服务器移动到新服务器,则检查数据库用户是否具有相应的访问权限
  7. 最后但并非最不重要的是,检查您的应用程序数据库配置是否确实按照您的预期进行操作(这可能应该放在第一位)

0
除了Eton B和Remus Rusanu所说的,您还应该检查SQL Server上是否启用了命名管道协议。要检查(在服务器上):
  1. (开始菜单中的程序)
  2. (Microsoft SQL Server 2008 / Microsoft SQL Server 2008 R2)
  3. SQL Server配置管理器
  4. 展开SQL Server网络配置
  5. (选择)。这将列出协议以及它们是否已启用。

如果未启用命名管道,则右键单击,属性,将Enabled更改为Yes

另一个选择是强制使用tcp(显然使用类似于上述步骤来验证tcp是否已启用)。您可以通过更改连接字符串以便在服务器名称前加上tcp:来强制使用tcp:

myConn.Open ("Driver={SQL Server};
              Server=tcp:myNetwrkServer;
              Database=myDB;
              UID=myID;PWD=myPWD;Trusted_Connection=NO;")

如果您强制使用TCP,请注意,默认情况下您的应用程序将访问端口1433上的数据库,这意味着如果该服务器正在运行防火墙,则必须打开该端口。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接