【问题标题】:SQL Express connection string hell ASP.NetSQL Express 连接字符串地狱 ASP.Net
【发布时间】:2009-07-23 10:15:50
【问题描述】:

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 不存在或访问被拒绝”(这是多么可爱的混合错误消息!):

  • Data Source=localhost;Integrated Security=True;Initial Catalog=TheDatabase
  • 数据源=localhost\SQLEXPRESS;Integrated Security=True;初始目录=TheDatabase
  • Data Source=MyLaptop\SQLEXPRESS;Integrated Security=True;Initial Catalog=TheDatabase
  • Server=MyLaptop\SQLEXPRESS;Initial Catalog=TheDatabase;User Id=TheUser;Password=ThePassword;

我在 SQL Express 中为 MyLaptop/IUSR_MyLaptop、MyLaptop/ASPNET、MyLaptop/IWAM_MyLaptop 创建了登录名,并为他们授予了对我的数据库的所有读/写权限,并将它们的默认数据库设置为 TheDatabase。

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

更新:特别感谢 Chris 的所有指点,最后到达那里,如果您遇到类似问题,请阅读所有 cmets,其中有很多关于如何追踪它们的链接和提示。

【问题讨论】:

  • 可能是一个愚蠢的问题,但您尝试连接的 sql express 服务器的实际实例名称是什么?是 localhost\sqlexpress 还是别的什么?将应用程序排除在外,然后尝试通过 sqlcmd 连接到 sql,方法是在命令提示符下执行 'sqlcmd -S servername\instancename -E' 并查看它是否连接。
  • 该实例实际上称为 MSSMLBIZ,但为清楚起见,将其保留为 SQLExpress。在上面尝试并得到了这个:SQL Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF]。 Sqlcmd:错误:Microsoft SQL Native Client:建立与服务器的连接时发生错误。连接到 SQL Server 2005 时,此故障可能是由于在默认设置下 SQL Server 不允许远程连接。 Sqlcmd: Error: Microsoft SQL Native Client : Login timeout expired。签入服务器配置并全部打开?
  • 要尝试重新安装以尝试重置所有内容并重新开始...
  • 重新安装是一头猪!感谢本文的帮助,以防其他人在 Win XP SP2 上收到“SQL Server 无法启动”错误:support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B920114

标签: asp.net connection-string database-connection sql-server-express


【解决方案1】:

您能否准确告知配置中的内容?

您是否正在使用该块 - 在这种情况下,有效的连接字符串将是:

<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(由于托管位置的限制)。重新安装也不顺利......那些日子之一......
  • 也感谢您的帮助,克里斯,非常感谢,数据库设置并不是我真正的包...
【解决方案2】:

在您的评论中有错误消息,您应该浏览http://blogs.msdn.com/sql_protocols/archive/2007/05/13/sql-network-interfaces-error-26-error-locating-server-instance-specified.aspx中的项目

我认为实例正在运行并且允许通过 tcpip 进行连接?

【讨论】:

  • 现在阅读那篇文章,也下载 PortQry。是的,实例正在运行,根据我的阅读和看到它“应该”允许 tcpip。禁用动态端口并将其设置为始终使用 1434。如果在本地运行,我是否需要它?
  • 不 - 如果在本地连接并不重要,但您发生了一些奇怪的事情 - 您目前如何管理服务器。 SSMS?你是用 windows 还是 sql 登录连接?
  • 在配置管理器中 - 检查客户端配置以查看启用了哪些协议以进行连接以及它们的应用顺序。
  • 是的,通过 Windows 登录使用 Microsoft SQL Server Management Studio Express。进去就好了。此外,我通过将其设置为 0 再次打开了动态端口并将 tcpip 端口更改为 1433,我认为这是正确的端口(1434 用于我读过的 SQL 浏览器)。一分钟了解更多信息...
  • 那是用 -E 开关(windows auth)吗?您现在可以尝试使用 sqlcmd -S localhost\mssmlbiz -U 用户名 -P 密码来验证您是否可以使用您认为应该可以使用的凭据登录。
【解决方案3】:

您的数据源不应该是:Data Source=localhost\sqlexpress 吗?

【讨论】:

  • 试过那个,加在上面。
【解决方案4】:

您没有提到授予“TheUser”访问服务器上数据库的权限 - 如果您从另一台服务器恢复,您可能会遇到 sid 不匹配。

尝试运行

sp_update_users_login 'report'

针对有问题的数据库。

如果它返回报告中的用户帐户尝试:

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

重新映射事物。

【讨论】:

  • 我似乎没有可用的存储过程?消息 2812,级别 16,状态 62,第 1 行找不到存储过程“sp_update_users_login”。
  • 对不起 - 它应该是 sp_change_users_login ...但如果您甚至无法获得与服务器的基本连接,它可能不相关。
  • 好的,运行它,只有一个条目,我猜是开发人员运行数据库时的一个条目。不是我的一个。我确实恢复了数据库,但后来又添加了我的用户。克里斯,这份报告告诉我什么?
  • 这将告诉您不匹配的用户 - 即您服务器上用户的 sid 与数据库本身中的用户不匹配。在服务器之间移动数据库时的常见问题。如果报告中的内容不是您尝试连接的用户名,则忽略它。
猜你喜欢
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多