找不到服务器或无法访问服务器。验证实例名称是否正确,并且SQL Server配置为允许远程连接

时间:2017-06-25 11:38:31

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

我正在尝试通过构建一个基本的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的以下信息:

  

LocalDB不会创建任何数据库服务; LocalDB进程在需要时自动启动和停止。应用程序只是连接到“Data Source =(localdb)\ v11.0”,LocalDB进程作为应用程序的子进程启动。关闭此过程的最后一次连接几分钟后,该过程将关闭。

启用 启用 TCP / IP 客户端协议标签 Sql Server配置管理器 .Moreover我已经创建了自己的入站规则,允许访问端口号1433用于TCP / IP和程序用于动态端口以及 Windows防火墙。但没有成功。

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的初学者。快速帮助将受到高度赞赏。从最近三天开始,但没有快乐。提前谢谢。

2 个答案:

答案 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=&quot;data source=(local)\MYDEVEXPRESS12;initial catalog=Sample;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />