SQL Express连接字符串问题 ASP.Net

5

SQL Express 2005正在本地运行。我有一个由另一个人编写的项目也在同一台机器上运行。我想要做的就是连接它,不可能那么难吧?

这是我在旧的经典ASP代码中使用的方法,用于访问在同一实例上运行的另一个数据库:

Provider=SQLOLEDB;Data Source=MYLAPTOP\MSSMLBIZ;Persist Security Info=True;User ID=TestUser;Password=letmein;Initial Catalog=TestDB

但是尝试使用该版本会使.NET代码抛出异常,因为他使用了SQLServer驱动程序,所以不喜欢提供程序的东西。

这是他的代码中的原始连接字符串:

Server=(local);Initial Catalog=TheDatabase;User Id=TheUser;Password=ThePassword;

我已经访问了http://www.connectionstrings.com/sql-server-2005并尝试了其中几个选项,但所有这些都会得到“SQL Server不存在或拒绝访问”的错误消息(多么可爱的混合错误消息!):

  • 数据源=localhost;集成安全性=True;初始目录=TheDatabase
  • 数据源=localhost\SQLEXPRESS;集成安全性=True;初始目录=TheDatabase
  • 数据源=MyLaptop\SQLEXPRESS;集成安全性=True;初始目录=TheDatabase
  • 服务器=MyLaptop\SQLEXPRESS;初始目录=TheDatabase;用户Id=TheUser;密码=ThePassword;

我已经为SQL Express创建了MyLaptop/IUSR_MyLaptop、MyLaptop/ASPNET、MyLaptop/IWAM_MyLaptop的登录,并给予它们对我的数据库的读写权限,并将它们的默认数据库设置为TheDatabase。

我到底做错了什么,我该如何进一步调试问题?

更新:特别感谢Chris提供的所有指导,最终解决了问题,如果您遇到类似的问题,请阅读所有评论,有很多关于如何跟踪问题的链接和提示。


这可能是一个愚蠢的问题,但你试图连接的 SQL Express 服务器的实际实例名称是什么?它是 localhost\sqlexpress 还是其他什么?将应用程序从方程式中剔除,只需尝试通过在命令提示符中执行“sqlcmd -S servername\instancename -E”来连接到 SQL,看看是否连接成功。 - Chris W
实例实际上被称为MSSMLBIZ,但为了清晰起见,将其命名为SQLExpress。尝试了上述操作,得到了以下结果:SQL网络接口:找不到指定的服务器/实例[xFFFFFF]。 Sqlcmd:错误:Microsoft SQL Native Client:建立与服务器的连接时发生错误。在连接到SQL Server 2005时,此故障可能是由于默认设置下SQL Server不允许远程连接所致。 Sqlcmd:错误:Microsoft SQL Native Client:登录超时。在服务器配置中进行了检查,所有开关都打开了吗? - Pete Duncanson
打算尝试重新安装来尝试重置一切并重新开始... - Pete Duncanson
重新安装真是太麻烦了!感谢这篇文章的帮助,如果其他人在Win XP SP2上遇到“SQL Server启动失败”的错误,请参考此链接:http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B920114 - Pete Duncanson
4个回答

1
你能告诉我配置文件里具体有什么吗?
你是在使用 <connectionStrings> 块吗?如果是,有效的连接字符串应该是:
<add name="connection" providerName="System.Data.SqlClient" connectionString="Data Source=localhost\MSSMLBIZ;Initial Catalog=TheDatabase;Integrated Security=True" />

或者

<add name="connection" providerName="System.Data.SqlClient" connectionString="Data Source=localhost\MSSMLBIZ;Initial Catalog=TheDatabase;Integrated Security=False;User Id=TheUser;Password=ThePassword;Application Name=AppName;" />

或者你是从应用程序设置中获取连接字符串 - 在这种情况下,我猜你的提供程序在应用程序内部的代码中设置了?


应用程序设置,它的 .Net 版本为 1(由于它将被托管的限制)。重新安装也不顺利...这是那些日子之一... - Pete Duncanson
谢谢你的帮助,Chris。非常感激。数据库设置不是我的强项... - Pete Duncanson

0

你的数据源应该也是这样写的吧:Data Source=localhost\sqlexpress?


尝试了那个,已经添加在上面了。 - Pete Duncanson

0

你没有提到授予'TheUser'访问服务器上数据库的权限 - 如果你从另一个服务器还原,可能会有sid不匹配的情况。

尝试运行

sp_update_users_login 'report'

针对相关数据库。

如果它返回报告中的用户账户,请尝试:

sp_update_users_login 'update_one', 'theuser', 'theuser'

重新映射。


我好像没有那个存储过程可用?消息 2812,级别 16,状态 62,行 1 找不到存储过程 'sp_update_users_login'。 - Pete Duncanson
抱歉 - 应该是 sp_change_users_login ... 但如果您甚至无法建立基本连接到服务器,这可能并不相关。 - Chris W
好的,成功运行了。只有一个条目,我猜是开发者运行DB时创建的。不是我的其中之一。我确实恢复了数据库,但是随后又添加了我的用户。克里斯,这个报告告诉我什么? - Pete Duncanson
1
这将告诉您不匹配的用户 - 即在您的服务器上用户的SID与数据库本身中的SID不匹配的情况。在将数据库在服务器之间移动时,这是一个常见问题。如果报告中的内容不是您尝试连接的用户名,则只需忽略它即可。 - Chris W

0

1
不应该有影响,即使是本地连接,但你遇到了一些奇怪的问题 - 你目前是如何管理服务器的?使用 SSMS 吗?你是使用 Windows 登录还是 SQL 登录进行连接? - Chris W
在配置管理器中,检查客户端配置以查看连接所启用的协议及其应用顺序。 - Chris W
共享内存1,TCP/IP2,管道3...这有帮助吗? :| - Pete Duncanson
现在它正在通过命令行连接!我敢承认我在服务器名称中打了一个错字。抱歉。但接下来呢?我完全没有主意了。为了确保,我也检查了其他所有内容,没有更多的错别字。 - Pete Duncanson
1
那是使用了-E开关(Windows身份验证)吗?现在,您可以尝试sqlcmd -S localhost\mssmlbiz -U用户名-P密码来验证您是否可以使用您认为应该能够使用的凭据登录。 - Chris W
显示剩余4条评论

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