ASP.NET MVC无法从本地SQL Server Express数据库检索数据

时间:2016-03-06 18:03:10

标签: c# asp.net sql-server asp.net-mvc-5

首先请原谅我,但对于ASP.NET来说,我是一个全新的人,因为我现在正试图学习其中的一些内容。

我正在关注ASP.NET MVC4的在线教程之一,但我正在使用Visual Studio 2015社区(MVC5)和SQL Server 2014 Express。

目标是使用Windows身份验证从本地SQL Server Express数据库检索数据。在这种情况下,员工的身份,姓名,城市和性别。此时我收到以下错误:

  

类型' System.Data.Entity.Core.EntityException'的例外情况发生在EntityFramework.SqlServer.dll中但未在用户代码中处理

     

其他信息:基础提供商在Open上失败。

数据库看起来像这样 - Ids为int,其余为varchar(50)

enter image description here

Employee.cs位于模特:

[Table("tblEmployee")]
public class Employee
{
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string City { get; set; }
}

EmployeeContext.cs

public class EmployeeContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }
}

EmployeeController.cs

public class EmployeeController : Controller
{
        // GET: Employee
        public ActionResult Details(int id)
        {
            EmployeeContext employeeContext = new EmployeeContext();
            Employee employee = employeeContext.Employees.Single(emp => emp.EmployeeId == id);
            return View(employee);
        }
}

视图 - Details.cshtml

@model MVCDemo.Models.Employee

@{
    ViewBag.Title = "Employee Details";
}

<h2>Employee Details</h2>
<table style="font-family:Arial">
    <tr>
        <td>
            <b>Employee ID:</b>
        </td>
        <td>
            @Model.EmployeeId
        </td>
    </tr>
    <tr>
        <td>
            <b>Name:</b>
        </td>
        <td>
            @Model.Name
        </td>
    </tr>
    <tr>
        <td>
            <b>Gender:</b>
        </td>
        <td>
            @Model.Gender
        </td>
    </tr>
    <tr>
        <td>
            <b>City:</b>
        </td>
        <td>
            @Model.City
        </td>
    </tr>
</table>

最后,根目录中的web.config连接字符串(我确定)目录:

<add name="EmployeeContext" 
     connectionString="Data Source=DESKTOP-6RQ94N9\MAIN;Initial Catalog=Sample;Integrated Security=SSPI"
     providerName="System.Data.SqlClient" />

默认connectionString="Data Source=.\SQLEXPRESS;根本不起作用。 无论如何,Server explorer显示了与数据库的成功数据连接,我可以浏览Visual Studio中的表及其列。

当我启动项目并尝试例如:

http://localhost/MVCDemo/Employee/Details/1

网站只是加载了一段时间,然后上面提到的异常发生在

Employee employee = employeeContext.Employees.Single(emp => emp.EmployeeId == id);

当我调试应用程序时,employeeContext.Employees.Local.Count显示0,所以我猜没有数据被检索。

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

好吧,如果使用该选项,请参阅How to: Access SQL Server Using Windows Integrated Security

您可以连接到SQL&#34;您&#34;在Visual Studio(或SSMS)中,因为您正在运行Visual Studio作为&#34;您&#34; (您的 Windows用户帐户)。您的Asp.Net网站不是

您可以使用SQL身份验证(相反),因此您的应用程序(ASP.Net)和数据存储(SQL)用户是独立的,因此可以单独管理,而不必处理(创建)实际的Windows用户。如果/当你去生产/托管时(例如,web服务器和sql server是分开的,没有Windows&#34;域&#34;等),这将更加明显。

至于连接问题,请参阅How to Troubleshoot Connecting to the SQL Server Database Engine

H个。

答案 1 :(得分:1)

你确定employeeContext.Employees.Local.Count甚至试图调用数据库吗?您需要检查SQL Server Express实例的名称。转到“开始”菜单中所有程序中Microsoft SQL Server (your version)的文件夹,然后点击Sql Server Configuration Manager。在SQL Server Services标签中,您会看到SQL Server (NAME),如果您在安装过程中没有更改名称,通常会显示SQL Server (SQLEXPRESS)
enter image description here 此外,如果您能够使用SQLEXPRESS名称从Visual Studio访问SQL Server,则可以从本地运行的ASP.NET网站轻松访问它。我的一个项目有以下连接字符串:

<add name="DatabaseContext" connectionString="Data Source=DESKTOP-111111N\SQLEXPRESS;Initial Catalog=Sample;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False" providerName="System.Data.SqlClient" />

请尝试按照以下方式拨打您的数据库:employeeContext.Employees.Count() 我希望这对你有所帮助!

更新

还请检查数据库上下文类构造函数中设置的连接字符串,对于我的项目base("DatabaseContext")

public class DatabaseContext : DbContext
{
    public DatabaseContext()
        : base("DatabaseContext")
    {
    }

}


对于您的项目,它将是base("EmployeeContext")

答案 2 :(得分:0)

嗯,在这种情况下,我实际上通过创建具有SELECT权限的用户并使用登录凭据更新了我的连接字符串来制定解决方法。

之后,我成功地从数据库中检索了所需的信息。谢谢大家的帮助!