IIS7应用程序使用错误的SQL Server 2008 Express数据库

我很难过 我有一个虚拟专用服务器上的客户端站点 – Windows Web Server 2008 SP2,IIS7,SQL Server 2008 Express。

我正在尝试安装第二个Web应用程序,以允许他在上线之前查看更新。 我在IIS7中创build了Web应用程序,并且向SQL Server添加了第二个数据库。 第二个数据库本质上是生产数据库的副本,“DEV”以数据库名称为前缀,在几个表中有一些新的字段。

我的生产网站工作正常。 但是,testing站点返回一个SqlException:“无效的列名'版本'”。 这是新的领域之一 – 这使我相信我的开发网站是指生产数据库,而不是开发数据库。 但是,连接string会指向不同的数据库(尽pipe两者的login名相同):

  • 生产站点:“服务器=。\ SQLExpress;数据库= myDbName;用户ID = myUserName;密码= myUserPassword;”
  • Dev站点:“服务器=。\ SQLExpress;数据库= DEVmyDbName;用户ID = myUserName;密码= myUserPassword;”

似乎这应该是明显的,我失踪的东西。 一位同事build议我为第二个IIS应用程序创build另一个应用程序池,但似乎没有帮助。

更新,进一步testing:

我改变了开发网站的连接string

"Server=.\SQLExpress;Database=DEVmyDbName;User ID=devuser;Password=myNewDifferentPassword;" 

并在数据库上创build了一个新的SQL服务器login名,并仅授予它访问开发数据库的权限。 我还将开发数据库设置为帐户的默认数据库。 我从生产login中删除了对开发数据库的访问。 当我尝试login到该网站时,出现以下错误:

  • 服务器主体“devuser”无法访问当前安全上下文下的数据库“myDbName”。

结果,我确定有两件事是肯定的:

  1. 由于它使用新的用户名login,我知道应用程序正在使用连接string我喂它;
  2. 出于某种原因,一旦login,它似乎忽略指定的数据库,并试图使用生产数据库。

仍然难倒。

更多的挖掘之后,我发现罪魁祸首 – 这是一个应用程序问题,与NHibernate的configuration有关。 其中一个设置的NHibernateconfiguration选项是“default_schema” – 当我删除它时,应用程序开始连接到正确的数据库。

看来,default_schema属性重写了连接string中指定的任何数据库。

听起来你有多个连接string, 有可能有一个存储在应用程序的地方吗?

只在开发系统上创build一个新的用户名/密码,更改你的开发连接string来使用它,如果连接,问题在别处。

如果您有权访问完整版本的SQL,则可以针对SQLExpress实例运行Profiler,并监视活动。