2012-04-01 40 views
0

这是我的代码:LINQ to SQL只能在调试模式下工作?

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/和我从数据库获取的值。

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

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

用户登录失败 'IIS APPPOOL \ WEBSITE1'。

我该如何设置? IIS问题?

+2

该消息告诉你确切的原因。你读过它吗? – usr 2012-04-01 15:06:34

+0

但为什么它在调试模式下工作?这意味着登录不会失败....也因为我可以从Visual Studio管理数据库,使用LINQ to SQL类... – markzzz 2012-04-01 15:08:24

+0

http://msdn.microsoft.com/en-us/library/aa266913(v= vs.60).aspx – 2012-04-01 15:16:46

回答

3

正如@usr指出的答案在你面前。

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

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

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

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

+0

我想我需要改变应用程序池连接字符串,我在web.config上看到它,对吗?实际是'':我该如何改变它? – markzzz 2012-04-01 15:51:28

+0

已解决,更改应用程序池上的高级选项中的LocalSystem,继此http://stackoverflow.com/questions/7698286/login-failed-for-user-iis-apppool-asp-net-v4-0 – markzzz 2012-04-01 16:01:13

+0

你怎么看?我很幸运?:) – markzzz 2012-04-01 16:01:54

相关问题