我正在尝试通过构建一个基本的Asp.net MVC Web应用程序来学习MVC,该应用程序在Sample.mdf
文件夹中有一个Instances-->v11.0
文件(示例数据库)。我的Windows 10上安装了Sql Server 2012 localdb。我能够使用服务器名称(localdb)\ V11来访问,创建数据库和表(Employee) SQL Server Management Studio 2017 以及命令提示符中的.0 。我正在使用 Windows身份验证并使用本地IIS 作为Web服务器,但是当我尝试通过C#代码(VS 2015)访问相同内容时,我遇到以下错误:
建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:50 - 发生本地数据库运行时错误。无法创建自动实例。请参阅Windows应用程序事件日志以获取错误详细信息
在行中:con.Open();
员工控制员:
public class EmployeeController : Controller
{
// GET: Employee
public ActionResult Index()
{
string connectionString = ConfigurationManager.ConnectionStrings["DBACESS"].ConnectionString;
List<Employee> employees = new List<Employee>();
using (SqlConnection con = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand("Select Id,Name,City from Employee", con);
cmd.CommandType = CommandType.Text;
if (con.State == ConnectionState.Closed)
{
con.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Employee employee = new Employee();
employee.EmployeeId = Convert.ToInt32(rdr["Id"]);
employee.Name = rdr["Name"].ToString();
employee.Gender = rdr["Gender"].ToString();
employee.City = rdr["City"].ToString();
employees.Add(employee);
}
}
}
return View(employees);
}
}
网址:
本地主机/ Web应用程序/雇员
连接字符串:
<add name="DBACESS" connectionString="server=(localdb)\v11.0;database=Sample.mdf;Integrated Security=True;"
providerName="System.Data.SqlClient"/>
调试时我发现在执行con.open()
con对象的ServerVersion属性之前没有设置并显示错误:
'ServerVersion'引发了'System.InvalidOperationException'类型的异常?“
员工模型类:
`public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
public string City { get; set; }
}`
身份验证模式:
`<system.web>
<authentication mode="Windows" />
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" />
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" />
</httpModules>
</system.web>`
我已尝试过堆栈溢出和论坛的各种修复,但没有任何效果。
1)尝试了其他实例,例如 mssqllocaldb 或 v12.0 ,但没有成功。
2)从 IIS 中的ApplicationPoolIdentity将身份类型更改为本地系统但未成功(事实上尝试了所有可能的方案)
3)在 IIS <默认AppPool 的高级设置中将加载用户个人资料设置为 True / strong>,但没有成功。
4)在 applicationHost.config 中设置setProfileEnvironment="true"
(但没有成功。)
C:\ Windows \ System32 \ inetsrv \ config
5 Sql Server配置管理器中的 SQL Server服务中没有项目。 这听起来并不奇怪,因为我找到了localdb的以下信息:
启用 启用 TCP / IP 客户端协议标签 Sql Server配置管理器 .Moreover我已经创建了自己的入站规则,允许访问端口号1433用于TCP / IP和程序用于动态端口以及 Windows防火墙。但没有成功。LocalDB不会创建任何数据库服务; LocalDB进程在需要时自动启动和停止。应用程序只是连接到“Data Source =(localdb)\ v11.0”,LocalDB进程作为应用程序的子进程启动。关闭此过程的最后一次连接几分钟后,该过程将关闭。
7)在 SSMS - &gt;右键单击服务器 ---&gt; 属性 - &gt; 连接标签我勾选了允许与此服务器的远程连接,但没有成功。
8)这是我登录的usermapping。为此用户启用了 db_owner 和公开。 User Mappings
9)服务器角色为我的登录用户 public和sysadmin 。
10)在 SSMS - &gt;右键单击服务器 ---&gt; 属性 - &gt; 安全标签我已启用 SQL服务器和Windows身份验证模式,但没有成功。
11)重新安装SQL server localdb但没有快乐。
12)我正在附加Windows事件日志文件以获取详细错误。Windows event log file
我是ASP.net MVC的初学者。快速帮助将受到高度赞赏。从最近三天开始,但没有快乐。提前谢谢。
答案 0 :(得分:0)
使用标准SQL安全性而不是Windows集成 - 它更容易实现。在SQL Server中设置一个新登录名,并使用该登录名为您尝试访问的数据库的新用户(使用户成为数据库的所有者)。然后使用此连接字符串,将用户名和密码替换为您已设置的登录凭据:
Server=myServerAddress;Database=myDataBase;User Id=myUsername;
Password=myPassword;
问题与您的代码无关,它纯粹是SQL服务器的身份验证问题,几乎肯定与SQL服务器接收的身份验证凭据有关。您收到消息的事实表明您的代码正在运行并尝试连接,并且在身份验证的最后阶段失败。使用SQL服务器登录可以更清楚地了解您通过的身份验证,并有助于消除问题的原因。
答案 1 :(得分:0)
尝试几乎所有事情后,没有工作。 Atlast我卸载 localdb 2012和已安装的SQL Server express 2012 。它就像一个魅力!!但我不知道localdb中的真正问题:(。 现在我使用实体框架和连接字符串(由 ADO .net实体数据模型生成)是:
<add name="EmployeeContext" connectionString="metadata=res://*/Models.EmployeeDataModel.csdl|res://*/Models.EmployeeDataModel.ssdl|res://*/Models.EmployeeDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=(local)\MYDEVEXPRESS12;initial catalog=Sample;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />