2011-03-02 49 views
1

我正在开发一组针对SQL数据库的Web应用程序,以及一些用于处理数据的控制台应用程序。我的生产服务器和dev服务器都是Server2008 32位,不同之处在于dev服务器位于虚拟PC上并运行SqlExpress 2008.WebApp在虚拟PC上看到SQL数据库,但控制台应用不在

当前有问题的Web应用程序和控制台应用程序共享相同的连接设置。当设置指向生产时,Web和控制台应用程序都可以正常工作。当指向dev时,Web应用程序可以正常工作,但控制台应用程序无法连接(错误:40,下图)。两者之间有什么区别会导致这种行为?

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

虚拟PC通过Microsoft环回连接进行联网。当我切换到以太网连接时具有相同的行为。

PortQry将两个长相相似:

开发:

UDP port 1434 (ms-sql-m service): LISTENING or FILTERED

Sending SQL Server query to UDP port 1434...

Server's response:

ServerName DEV
InstanceName SQLEXPRESS
IsClustered No
Version 10.50.1600.1
tcp 49282
np \DEV\pipe\MSSQL$SQLEXPRESS\sql\query

==== End of SQL Server query response ====

UDP port 1434 is LISTENING

生产:根据要求

UDP port 1434 (ms-sql-m service): LISTENING or FILTERED

Sending SQL Server query to UDP port 1434...

Server's response:

ServerName PRODUCTION
InstanceName MSSQLSERVER
IsClustered No
Version 9.00.4035.00
tcp 1433
np \PRODUCTION\pipe\sql\query

==== End of SQL Server query response ====

UDP port 1434 is 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

你可以发布你的连接字符串并用一些掩码字符替换敏感信息吗?可能的区别是用户帐户权限以及它们在环境与环境之间的差异。 – 2011-03-02 18:04:24

回答

0

在虚拟PC,你插件SqlServer Express 2008检查是否存在与此类似的组名:'SQLServer2005MSSQLUser $ PIETRO $ SQLEXPRESS'。

进入该虚拟PC的计算机管理中的“本地用户和组”。

该组的成员将会读取类似于“组中的成员具有必需的访问权限和特权,以作为SQL Server 2005中SQL Server和SQL Server FullText Search的关联实例的登录帐户进行分配”。

为了能够连接到笔记本中的本地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应用程序连接s到DEV Sql Express是Web应用程序很可能在ASP.NET计算机帐户的上下文中运行,并且您的DEV SQL Express 2008以某种方式成功验证了该帐户。

综上所述....

如果您正在使用集成安全性,请在您的连接字符串中指定它,并将您的控制台应用程序所运行的Windows帐户添加到虚拟PC中的sql express组。

如果您使用的是sql server身份验证,则连接字符串中的用户标识和密码必须是有效的sql express登录名。

祝你好运!

相关问题