无法使用实体框架连接到C#asp mvc应用程序中的Sql数据库,但相同的代码适用于Winform应用程序

无法使用实体框架连接到C#asp mvc应用程序中的Sql数据库,但相同的代码适用于Winform应用程序,c#,asp.net,asp.net-mvc,winforms,entity-framework,C#,Asp.net,Asp.net Mvc,Winforms,Entity Framework,首先,如果听起来太新潮,请原谅。我认为自己是MVC应用的新手。 我遇到了一个奇怪的问题,似乎没有任何办法可以解决,至少到目前为止1.我到处都找了,想尽一切办法让它工作起来。最后我转向这个论坛。 这是我的第一篇文章,所以任何错误请忽略并指导我 问题是多方面的 高级细节。。。 我已经创建了一个C#ASP MVC Web应用程序,等待上传到远程服务器(客户机)上 应用程序使用实体框架-代码优先的方法 使用Windows身份验证系统连接到数据库 场景1:应用程序工作的地方 我已经在我的机器上测试了这个应

首先,如果听起来太新潮,请原谅。我认为自己是MVC应用的新手。 我遇到了一个奇怪的问题,似乎没有任何办法可以解决,至少到目前为止1.我到处都找了,想尽一切办法让它工作起来。最后我转向这个论坛。 这是我的第一篇文章,所以任何错误请忽略并指导我

问题是多方面的

高级细节。。。 我已经创建了一个C#ASP MVC Web应用程序,等待上传到远程服务器(客户机)上 应用程序使用实体框架-代码优先的方法 使用Windows身份验证系统连接到数据库

场景1:应用程序工作的地方 我已经在我的机器上测试了这个应用程序,它工作得完美无缺。 我的系统上安装了Sql Server Management Studio的Express edition

场景2:应用程序失败的地方。问题-大局 它在我的系统上运行得很好,但在远程服务器上测试时崩溃了 应用程序无法连接到远程服务器Sql数据库。一旦尝试连接到数据库,它就会崩溃,并显示错误消息“用户登录失败”

我已经检查了连接字符串中的所有内容- 数据源名称正确 初始Catlog还指向正确的数据库名称 集成安全性=真 没有提到用户ID或密码

连接字符串在我的系统上工作得很好。但它在客户机上工作,并显示上面的错误

连接字符串是: connectionString=“Data Source=RemoteComputerName;Initial Catalog=DatabaseName;Integrated Security=True;MultipleActiveResultSets=True”

我无法准确找出导致错误的原因-是我的代码还是Sql Server数据库设置-权限。 由于连接在我的本地机器上工作,这意味着代码是正确的

为了检查sql server权限是否正常工作..我在WINFORM中创建了部分“测试连接应用程序”,并将其上载到服务器上,这次代码正常工作并读取所有表数据

但当我尝试在MVC项目中连接时,它显示错误…“用户登录失败…”

我完全搞不懂WINFORM中的工作原理在MVC中失败了

数据库权限必须正确,因为当尝试使用WINFORM访问它时,它起作用

请让我知道,如果我错过了在这篇文章中提供任何细节

非常感谢您的帮助


谢谢。

请显示您的连接字符串。(您可以屏蔽任何真实密码、实际服务器名称、实际数据库名称)

既然您提到“Integrated Security=true”……那么您必须知道哪个身份正在运行该进程(网站或winforms.exe)

当以winforms应用程序运行时,您是以“您”(最有可能)的身份运行的。与中一样,已登录的用户将访问windows o/s

在IIS下运行时,您使用的是与正在使用的应用程序池关联的身份。该身份很可能不是您,而是服务帐户

您的服务帐户无权访问sql server

您可以在此处深入阅读:

您可以通过捕获异常,然后执行类似以下操作来显示:

您可以用任何内容替换算术异常,我只是向捕获的异常显示“添加信息”并重新引用

try
{
// some sql server access code
}
catch(Exception ex)
{
       throw new ArithmeticException("What is the real IIdentity: " + this.FindIIdentity(), ex);
}


private string FindIIdentity()
{

    try
        {

        //'Dim user As WindowsPrincipal = CType(System.Threading.Thread.CurrentPrincipal, WindowsPrincipal)

        //'Dim ident As IIdentity = user.Identity

        string returnValue = string.Empty;

        WindowsIdentity ident = WindowsIdentity.GetCurrent();

        returnValue = ident.Name;

        try
            {

            returnValue += " on " + System.Environment.MachineName;

        } catch (Exception ex)
            {}

        return returnValue;

    } catch (Exception ex)
        {

        return "Error Finding Identity";

    }

}
IIS截图


您试图连接的远程SQL server,您的用户名密码在那里有效吗?ConnectionString?您谈论了很多关于所有详细信息,但您从未提供实际连接的信息,并且eror明确表示这是用户的权限问题。请发布您的连接字符串。感谢您的回复。我已使用远程服务器上使用的连接字符串更新了帖子谢谢您的详细帖子。我已经用连接更新了我的问题,我的答案很好。你需要弄清楚这两种不同的身份是什么。再次非常感谢。现在我想更接近解决方案。虽然我不知道身份,但我已经尝试运行上面显示的代码。我在Winform和MVC应用程序中运行了代码,得到了两个不同的标识。是,winform上显示的标识必须具有访问sql server的权限。但由于这是我的第一个基于Web的项目,我对IIS、身份和其他相关内容不太了解。关于如何确保web应用所使用的身份具有访问数据库的权限,请您提供更多指导。再次感谢。是的,它起作用了。登录名是系统名,如“LANNAME\MACHINENAME$”。我在SQLServer登录中创建了名为的登录,并将其设置为Windows身份验证选项。它开始工作了。谢谢你!!