【问题标题】:IIS7 application using wrong SQL Server 2008 Express databaseIIS7 应用程序使用错误的 SQL Server 2008 Express 数据库
【发布时间】:2010-09-10 19:56:30
【问题描述】:

我被难住了。我在虚拟专用服务器上有一个客户端站点 - Windows Web Server 2008 SP2、IIS7、SQL Server 2008 Express。

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

我的生产站点运行良好。但是,测试站点返回 SqlException:“列名 'version' 无效。”这是新领域之一——这让我相信我的开发站点指的是生产数据库,而不是开发数据库。但是,连接字符串确实指向不同的数据库(尽管两者的登录名相同):

  • 生产站点:“Server=.\SQLExpress;Database=myDbName;User ID=myUserName;Password=myUserPassword;”
  • 开发站点:“Server=.\SQLExpress;Database=DEVmyDbName;User ID=myUserName;Password=myUserPassword;”

似乎这应该是我遗漏的明显内容。一位同事建议我为第二个 IIS 应用程序创建另一个应用程序池,但似乎没有帮助。

更新,经过进一步测试:

我将开发站点的连接字符串更改为

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

并在数据库上创建了一个新的 SQL Server 登录名,并且只授予它访问 dev 数据库的权限。我还将 dev 数据库设置为帐户的默认数据库。我从生产登录中删除了对 dev 数据库的访问。当我尝试登录该网站时,我收到以下错误:

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

因此,我确定有两件事:

  1. 由于它使用新用户名登录,我知道该应用正在使用我提供的连接字符串;
  2. 出于某种原因,一旦登录,它似乎会忽略指定的数据库并尝试使用生产数据库。

我不认为它应该有所作为,但我会提到我正在使用 NHibernate 进行数据库访问。

还是一头雾水。

【问题讨论】:

  • 你用什么方法访问SQL数据库,Linq,ADO,什么的?
  • NHibernate,其配置选项是指有问题的连接字符串。

标签: asp.net nhibernate iis-7 sql-server-express


【解决方案1】:

事实证明,NHibernate 很重要。设置的 NHibernate 配置选项之一是“default_schema” - 当我删除它时,应用程序开始连接到正确的数据库。

似乎 default_schema 属性覆盖了连接字符串中指定的任何数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 2010-09-22
    • 1970-01-01
    • 2015-10-19
    • 2013-12-30
    相关资源
    最近更新 更多