从传统ASP连接到SQL Server 2008的命名实例

时间:2010-08-05 19:02:01

标签: sql sql-server-2008 asp-classic

我的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";)

请帮忙!

7 个答案:

答案 0 :(得分: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},让司机经理弄清楚细节。

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

作为一般规则,“新代码不起作用”绝不是您应该提出的帮助请求。始终将如何不起作用。你得到例外或错误吗?什么异常,什么消息?试图帮助你不一定是一本神秘的小说。

答案 1 :(得分:8)

您在行尾附近有不匹配的引号。

应该是这样的

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

答案 2 :(得分: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;")

答案 3 :(得分: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;")

答案 4 :(得分:1)

正如其他人所说,报价不匹配。但是,您不应该需要可信连接位。您可以使用UID=PWD=,或Trusted_Connection=yes。您不需要同时拥有所有属性。

这应该可以正常工作:

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

答案 5 :(得分:1)

这是我从任何网络应用程序连接到新SQL Server失败时检查的清单(已经提到了一些要点):

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

答案 6 :(得分: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. (选择协议)。这将列出协议以及它们是否已启用。
  6. 如果未启用“命名管道”,请右键单击“属性”,将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上的数据库,这意味着如果该服务器正在运行防火墙,则需要在服务器上打开该端口。