【问题标题】:The server was not found or was not accessible.Verify that the instance name is correct and that SQL Server is configured to allow remote connections找不到服务器或无法访问服务器。请验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接
【发布时间】:2017-11-28 11:34:30
【问题描述】:

我正在尝试通过构建一个基本的 Asp.net MVC Web 应用程序来学习 MVC,该应用程序在 Instances-->v11.0 文件夹中有一个 Sample.mdffile(Sample Database)。 Sql Server 2012 localdb 安装在我的 Windows 10 上。我 能够 使用服务器名称 (localdb)\V11 访问、创建数据库和表(员工) .0 在 SQL Server Management Studio 2017 以及命令提示符中。我正在使用 Windows 身份验证 并使用 local 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);
    }
}

网址

本地主机/WebApp/员工

连接字符串

<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) 尝试了其他实例,例如 mssqllocaldbv12.0,但没有成功。

2)在 IIS 中从 ApplicationPoolIdentity 将 identity type 更改为 Local System 但没有成功(实际上尝试了所有可能的方案)

3)在IISDefaultAppPoolAdvanced Settings中将Load User Profile设置为True /strong>,但没有成功。

4)在applicationHost.config中设置setProfileEnvironment="true"(但没有成功)

C:\Windows\System32\inetsrv\config

5)Sql Server 配置管理器中的SQL Server Services中没有项目。 这听起来并不奇怪,因为我找到了以下有关 localdb 的信息:

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

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

7)在SSMS-->右击Server--->properties-->Connections > 选项卡 我勾选了允许远程连接到此服务器,但没有成功。

8) 这是我的登录用户映射。 db_ownerpublic 已为此用户启用。 User Mappings

9)服务器角色对于我的登录用户是公共和系统管理员

10)在SSMS-->右击Server--->properties-->Security 选项卡 我也启用了SQL server 和windows 身份验证模式,但没有成功。

11) 重新安装了 SQL server localdb 但没有任何乐趣。

12)我正在附加 Windows 事件日志文件以获取详细错误。Windows event log file

我是 ASP.net MVC 的初学者。快速帮助将不胜感激。自过去三天以来一直在尝试,但没有任何乐趣。提前致谢。

【问题讨论】:

  • 我不认为在连接字符串中正确使用database 属性。我想你想要Initial Catalog,并删除“.mdf”,所以它只是sample
  • 也尝试使用初始目录但没有成功。
  • 更改应用程序池以在您的用户帐户下运行以查看它是否有效,但不要永久修复。
  • 你能告诉我该怎么做吗?我不知道。
  • 按照 Crowcoder 的建议更改连接字符串。使用 sql server 附带的 SQL Server Management Studio (SSMS) 检查连接实例。登录窗口包含连接的实例,请确保您使用的实例与登录窗口中的实例相同。使用资源管理器登录并检查您使用的数据库是否正确。

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


【解决方案1】:

使用标准 SQL 安全而不是 Windows 集成 - 这样做更容易。在 SQL Server 中设置一个新登录名和一个使用该登录名登录到您尝试访问的数据库的新用户(使该用户成为数据库的“所有者”)。然后使用此连接字符串,将用户名和密码替换为您设置的登录凭据:

Server=myServerAddress;Database=myDataBase;User Id=myUsername;
Password=myPassword;

该问题与您的代码无关,它纯粹是 SQL Server 的身份验证问题,几乎可以肯定与 SQL Server 作为身份验证凭据接收的内容有关。您收到消息的事实表明您的代码正在工作并尝试连接,并且在身份验证的最后阶段失败。使用 SQL Server 登录可以更清楚地了解您正在通过什么身份验证,并有助于消除问题的原因。

【讨论】:

  • 我尝试使用 sql server 身份验证,但没有成功。通过创建 ADO .net 数据模型生成连接字符串:&lt;add name="EmployeeContext" connectionString="metadata=res://*/Models.EmployeeDataModel.csdl|res://*/Models.EmployeeDataModel.ssdl|res://*/Models.EmployeeDataModel.msl;provider=System.Data.SqlClient;provider connection string=&amp;quot;data source=(localdb)\V11.0;Initial Catalog=Sample;User Id=myuserId;Password=mypassword;MultipleActiveResultSets=True;&amp;quot;" providerName="System.Data.EntityClient" /&gt;。我测试了连接,测试正常。出了什么问题?
  • 顺便说一句,我正在使用实体框架。您能看看上面的第 5 点,即为什么 Sql Server 配置管理器中的 SQL Server 服务中没有项目。这是我的SSCM
【解决方案2】:

几乎尝试了所有方法后,没有奏效。 Atlast 我卸载了 localdb 2012 并安装了 SQL server express 2012。它的工作原理就像一个魅力!!但我不知道 localdb 的真正问题是什么:(。 现在我使用的实体框架和连接字符串(由ADO .net Entity Data Model生成)是:

<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" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多