首先请原谅我,但对于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)
:
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,所以我猜没有数据被检索。
非常感谢您的帮助!
答案 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)
。
此外,如果您能够使用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权限的用户并使用登录凭据更新了我的连接字符串来制定解决方法。
之后,我成功地从数据库中检索了所需的信息。谢谢大家的帮助!