【问题标题】:LINQ to SQL works only in debug mode?LINQ to SQL 只能在调试模式下工作?
【发布时间】:2012-04-01 15:02:50
【问题描述】:

这是我的代码:

DataClassesDataContext data = new DataClassesDataContext();
var hey = from p in data.Provas
          select p;
Response.Write(hey.First().title_it);

如果我在 Visual Studio 中打开这个播放开始,它会打开 http://localhost:51180/Website1/,我会从 DB 中获取值。

但是,如果我用http://localhost:8080/(通常我用这个打开)打开网站,我会得到:

System.Data.SqlClient.SqlException: Cannot open database "Website1" requested by the login. The login failed.

用户“IIS APPPOOL\Website1”登录失败。

我应该如何设置? IIS 问题?

【问题讨论】:

  • 该消息告诉您确切的原因。你读了吗?
  • 但是为什么它在调试模式下工作?这意味着登录不会失败......也因为我可以从 Visual Studio 管理 DB,使用 LINQ to SQL 类......
  • 你的连接字符串是什么?
  • @habib.osu :我在服务器资源管理器上通过“添加连接”创建连接字符串,并对其进行测试,它也能正常工作!

标签: c# .net sql-server linq-to-sql iis


【解决方案1】:

正如@usr 指出的那样,答案就在你面前。

当您在调试模式下从 Visual Studio 运行应用程序时,连接到数据库的用户是登录到 PC 并运行 Visual Studio 的用户 - 奇怪的是,该用户(您!)是管理员并且具有管理员权限SQL Server(我假设是本地实例)。

当您通过 IIS 的本地安装运行应用程序时(可以合理地假设它是完整版本,而不是明确的),除非您更改应用程序的应用程序池,否则它将以本地系统用户身份运行(现在忘记是哪一个了,你可以去应用程序池看看)默认情况下,该用户将无权访问 SQL Server 中的数据库。

要解决此问题,您需要执行以下两项操作之一: a)将应用程序池中的用户更改为对 SQL Server 中的数据库具有权限的用户(如果您想要良好的做法,那么您应该定义一个显式用户) b) 授予适当的系统帐户访问数据库的适当权限

(请注意,在这两种情况下,您都需要使用 Management Studio 或等效工具将用户添加到 SQL Server)

【讨论】:

  • 我想我需要更改应用程序池连接字符串。我在 web.config 上看到了,对吧?实际是<add name="Website1ConnectionString" connectionString="Data Source=MARCO-PC\SQLEXPRESS;Initial Catalog=Website1;Integrated Security=True" providerName="System.Data.SqlClient"/>:我该如何更改?
  • 已解决,在应用程序池的高级选项中更改LocalSystem,遵循stackoverflow.com/questions/7698286/…
  • 你怎么看?我很幸运? :)
【解决方案2】:

验证http://localhost:8080/ 上的登录名。可能this article 会帮助你。

【讨论】:

  • <add name="PizzeriaFolonConnectionString" connectionString="Servere=MARCO-PC\SQLEXPRESS;Database=IFItest;User ID=markzzz;pwd=pass" providerName="System.Data.SqlClient"/> 试过,但什么都没有...... :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2012-06-30
  • 2014-12-09
相关资源
最近更新 更多