我正在开发一组针对SQL数据库的Web应用程序,以及一些用于摆弄数据的控制台应用程序。我的生产服务器和开发服务器都是Server2008 32位,不同之处在于开发服务器在虚拟PC上运行并运行SqlExpress 2008.
目前有问题的网络应用和控制台应用共享相同的连接设置。当设置指向生产时,Web和控制台应用程序都可以正常工作。当指向dev时,Web应用程序运行正常,但控制台应用程序无法连接(错误:40,如下)。两者之间有什么区别会导致这种行为?
建立a时发生网络相关或特定于实例的错误 连接到SQL Server。服务器未找到或无法访问。 验证实例名称是否正确以及是否配置了SQL Server 允许远程连接。 (提供者:命名管道提供商,错误:40 - 无法打开与SQL Server的连接)
Virtual PC通过Microsoft Loopback Connection联网。切换到以太网连接时的行为相同。
两者的PortQry看起来相似:
开发:
UDP端口1434(ms-sql-m服务):LISTENING或FILTERED
将SQL Server查询发送到UDP端口1434 ...
服务器的回复:
ServerName DEV
InstanceName SQLEXPRESS
IsClustered没有 版本10.50.1600.1
tcp 49282
np \ DEV \ pipe \ MSSQL $ SQLEXPRESS \ sql \ query==== SQL Server查询响应结束====
UDP端口1434是LISTENING
生产:
UDP端口1434(ms-sql-m服务):LISTENING或FILTERED
将SQL Server查询发送到UDP端口1434 ...
服务器的回复:
ServerName PRODUCTION
InstanceName MSSQLSERVER
IsClustered没有 版本9.00.4035.00
tcp 1433
np \ PRODUCTION \ pipe \ sql \ query==== SQL Server查询响应结束====
UDP端口1434是LISTENING
请求的连接字符串:
<connectionStrings>
<add name="ProductionConnection" connectionString="Data Source=production.productiondomain.local;Initial Catalog=XXXXXXX;Persist Security Info=True;User ID=xxxx;Password=xxxx" providerName="System.Data.SqlClient"/>
<add name="DevConnection" connectionString="Data Source=dev\SQLEXPRESS;Initial Catalog=XXXXXXX;Persist Security Info=True;User ID=xxxx;Password=xxxx" providerName="System.Data.SqlClient"/>
</connectionStrings>
答案 0 :(得分:0)
在安装了SqlServer Express 2008的虚拟PC中,检查是否存在类似于此的组名:'SQLServer2005MSSQLUser $ PIETRO $ SQLEXPRESS'。
进入该虚拟PC的“计算机管理”中的“本地用户和组”。
组的描述将读取类似“组中的成员具有所需的访问权限和权限,以指定为SQL Server 2005中SQL Server和SQL Server FullText搜索的关联实例的登录帐户。”< / p>
为了能够在我的笔记本中连接到我的本地SQL Express 2005,我不得不将用于登录此笔记本的Windows帐户添加到所提到的Windows组中。我不得不使用这个连接字符串:
"Data Source=PIETRO\SQLEXPRESS;Initial Catalog=irisdb;Integrated Security=True;"
重要的是要注意'Integrated Security = True'部分。这意味着,SQL Express将使用我的Windows帐户验证我的连接尝试。
如果您没有在连接字符串中使用集成安全性,那么您使用的是SQLServer身份验证,这意味着连接字符串中的用户ID和密码必须是有效的SQL Server登录名:
User ID=xxxx;Password=xxxx
我记得在SQL Express中创建登录是一件麻烦事,因为SQL Express 2005没有附带管理工具,但是,如果你有,请仔细检查你在用户身份和密码中使用的值。 Dev的连接字符串是SqlExpress 2008中的有效登录名。
我猜测Web应用程序连接到DEV Sql Express的原因是Web应用程序很可能在ASP.NET计算机帐户的上下文中运行,并且您的DEV SQL Express 2008正在以某种方式成功验证该帐户。
总结......
如果您使用集成安全性,请在连接字符串中指定它,并将运行控制台应用程序的Windows帐户添加到虚拟PC中的sql express组。
如果您使用的是sql server身份验证,则连接字符串中的用户ID和密码必须是有效的sql express登录。
祝你好运!