WebApp在Virtual PC上看到SQL DB,但Console App没有

时间:2011-03-02 17:27:55

标签: .net sql virtual

我正在开发一组针对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>

1 个答案:

答案 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登录。

祝你好运!