【问题标题】:Duplicate SQL Server database on same server cannot be accessed无法访问同一服务器上的重复 SQL Server 数据库
【发布时间】:2010-09-26 21:43:50
【问题描述】:

我在 Windows Server 2003 R2 上使用 SQL Server Workgroup Edition

我的经典 ASP 页面使用系统 DSN 访问我的生产数据库。都在这里工作。

这样的代码...

<%
dbName= "ProdDB"  
userID = "PublicUser"  
pwd = "PublicUserPW"

Set objConn = Server.createObject("ADODB.Connection")  
objConn.connectionString = "DSN=MySystemDSN"  
objConn.open dbName, userID, pwd  
%>  

为了开发和测试,我在 Enterprise Manager 中创建了 ProdDB 的副本

  • 备份 ProdDB
  • 从 ProdDB 备份集恢复到名为 TestDB 的新数据库

我的理解是,恢复的数据库将包含数据的精确副本以及用户、角色等。在 Enterprise Manager 中比较两个数据库似乎支持了这一假设。

所以...我假设我可以使用相同的凭据访问测试副本,并且只更改 dbName,就像这样...

<%
dbName= "TestDB"  
userID = "PublicUser"  
pwd = "PublicUserPW"

Set objConn = Server.createObject("ADODB.Connection")  
objConn.connectionString = "DSN=MySystemDSN"  
objConn.open dbName, userID, pwd  
%>  

但是,现在我的页面返回了

[Microsoft][ODBC 驱动程序管理器] 数据 未找到源名称且没有默认值 指定驱动程序

我什至尝试创建一个新的系统 DSN,默认数据库指向 TestDB。还是不开心。

我确定我在做一些简单而愚蠢的事情。感谢您提供任何帮助。

【问题讨论】:

  • 看起来它没有找到名为“MySystemDsn”的系统 dsn。在管理工具下打开 ODBC 管理器。检查标有“系统 DSN”的标签。
  • 不,绝对不是。访问 ProdDB 数据库的页面工作正常,它们使用相同的 DSN。
  • 代码中唯一改变的是 dbName。

标签: sql-server asp-classic dsn


【解决方案1】:

open method 的文档说它已声明:

connection.Open ConnectionString, UserID, Password, Options

所以看起来您正在传递TestDB 作为连接字符串。我通常在不指定任何参数的情况下调用 open。从connectionstrings dot com 获取连接字符串,然后:

objConn.ConnectionString = "Data Source=localhost;Initial Catalog=testdb;" & _
    "User Id=myUsername;Password=myPassword;"
objConn.Open

【讨论】:

  • 感谢 Andomar,您可能在这里有所收获。事实证明,还有另一个与 Prod DB 同名的系统 DSN,因此连接可能是通过该 DSN(即称为 ProdDB 的 DSN)而不是我认为正在使用的 DSN(即根本没有使用 MySystemDSN )
猜你喜欢
  • 1970-01-01
  • 2018-05-26
  • 2013-05-12
  • 2019-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 2022-01-14
相关资源
最近更新 更多