【问题标题】:error occurred while establishing a connection to SQL Server建立与 SQL Server 的连接时出错
【发布时间】:2013-04-02 05:41:21
【问题描述】:

如果我在 web.config 中有这样的连接字符串(添加换行符以提高可读性):

<add 
name="conn" 
connectionString="Data Source=(localdb)\v11.0; Initial 
    Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True; 
    AttachDbFilename=D:\Products.mdf" 
providerName="System.Data.SqlClient"/>

连接正常,我可以在数据库资源管理器中连接到数据库。

当我在代码中指定连接字符串或使用 ConfigurationManager 获取它时,它不起作用:

    SqlCommand command = new SqlCommand();
    command.CommandText = "select ...";
    command.CommandType = CommandType.Text;
    SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+
        "Initial Catalog=MyDB; Integrated Security=True; "+
        "MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf");
    command.Connection = cn;
    cn.Open();
    DataTable dataTable = new DataTable();
    SqlDataReader reader;
    reader = command.ExecuteReader();
    dataTable.Load(reader);
    cn.Close();

从 web.config 获取连接字符串给出了同样的错误:

SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings
 ["conn"].ConnectionString;

我得到的错误是“System.ComponentModel.Win32Exception: The network path was not found”

痕迹中说:

发生网络相关或特定于实例的错误,同时 建立与 SQL Server 的连接。找不到服务器或 无法访问。验证实例名称是否正确,并且 SQL Server 配置为允许远程连接。 (提供者:命名 Pipes Provider,错误:40 - 无法打开与 SQL 的连接 服务器)]

我需要一些帮助来解决这个问题,我已经尝试解决了几个小时,任何在线建议是我应该检查网络设置(不适用,因为它连接到本地 sql server express 实例)。服务器名称(相同的字符串在 VS Express 中有效,但在运行代码中无效)。

可能是身份验证问题吗?如果是这样,那么为什么会出现信息不足的错误?

感谢您阅读我的帖子,希望您能帮助我。

更新:

我尝试了以下方法:

授予组每个人对 mdf 和 ldf 文件的完全权限

在 web 下的项目属性中,我尝试在 VS 开发服务器和本地 IIS web 服务器(是 IIS Express)下运行该项目

不走运,将代码复制到使用“ASP.NET 空 Web 应用程序”创建的项目时,仍然无法完美连接到哪里

【问题讨论】:

  • sql server 的版本是什么???
  • 我的猜测是程序文件中的 sql server express 11(连接字符串中的 v11.0)我有一个 SQL server 文件夹,其中包含名为 8 到 11 的子文件夹(标准 VS 2013 快速安装)跨度>

标签: .net sql-server web-config connection-string


【解决方案1】:

您已正确转义了 db 文件名,但未转义数据源,因此它尝试连接到名为“(localdb)11.0”的数据源,该数据源(很可能)不存在。

尝试像这样正确地转义它:

SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+
"Initial Catalog=MyDB; Integrated Security=True; "+
"MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf");

【讨论】:

  • 谢谢,这确实使代码在另一个项目中工作。我正在做的事情没有项目文件,所以我使用了文件 => 打开网站。在新的 Web 表单项目中工作的代码不在“开放网站”项目中(复制和粘贴的工作代码)。
  • 这个问题依然存在。当使用项目“打开网站”并添加数据连接以使用上面提到的连接字符串或从 web 配置中获取测试“sql server express”时,我得到了前面提到的错误。当使用完全相同的连接字符串时,它在使用“empty asp.net web application”或“asp.net web forms application”创建项目时起作用
  • 根据异常详情,您使用的是命名管道协议;你能切换到 TCP/IP 看看它是否有帮助?另请参阅weblogs.asp.net/jgalloway/archive/2007/02/24/…,您是否尝试连接到其他 SQL Server 实例?
  • 它连接到 SQL server 和网站使用的服务器,但它永远不会连接到我的本地 sql server express。
  • 在数据库资源管理器的 VS 中,我可以使用相同的连接字符串浏览表,但应用程序不能。将代码和连接字符串复制到 anotehr 应用程序使其工作。只是想为我在本地处理项目但无法使其工作时设置一个测试数据库。也许它需要驱动程序参考。
【解决方案2】:

只是为了笑而不是放(localdb)句号'.'。所以它看起来像

Data Source=.\v11.0;

如果它有效,我会感到惊讶,但您可以在完整的 SQL 中做到这一点。

【讨论】:

    【解决方案3】:

    由于这是网站项目,您需要指定正确的 .net 框架版本来构建。 SqlLocalDb 需要.net framework 4.

    如果您创建 Web 项目并向其中添加网站源文件,如果 .net 框架为 4+,它将可以工作。当您打开网站默认目标框架或现有 dll 框架可能不一样并且可能是 .net 3.5 时,这就是您收到此错误的原因。

    【讨论】:

    • 我确实需要将目标框架更改为 3.5,因此尝试了一个连接字符串,例如“Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Products.mdf;Integrated Security=True;;Connect Timeout=30 ;User Instance=True" 在 web.config 但同样的错误。
    • 您说得对,需要 .net 4,0 作为使用 (localDb) 的连接字符串。由于根本无法使用 .net 4.0 构建项目并且服务器使用 .net 2.0,因此我使用命名管道连接到 localdb。
    【解决方案4】:

    您是否尝试过使用 '.\SQLExpress;' 而不是使用 (localdb)根据MSDN 上的这个页面?它使用默认实例,这可能不是您需要的。

    应该是这样的:

    <add 
    name="conn" 
    connectionString="Provider=SqlClient;Data Source=.\\SQLExpress; Initial 
        Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True; 
        AttachDbFilename=D:\Products.mdf" 
    providerName="System.Data.SqlClient"/>
    

    【讨论】:

    • 谢谢 Daniele,试过了,但同样的错误,它在 VS 数据库资源管理器中停止工作。它在 VS 数据库资源管理器中工作并且连接字符串取自 Web 配置的事实告诉我连接字符串应该是正确的,但可能不适用于 .net 3.5 或 VS 在它是网站项目或...
    • Daniele,你接近正确答案了。问题是标准的 VS 2013 安装不安装 SQL server Express,而只安装 sql local express。当在连接字符串中使用 sqlExpress 然后关闭和打开 VS 时,它抱怨没有 sql server express。我认为 localdb 是 sql server express 的一个功能,也许我错了,VS 只是给出警告让我更加困惑。
    • HMR,我明白了,这是有道理的。感谢您提供更多信息。听起来这里确实发生了其他事情。
    【解决方案5】:

    检查可用的空项目和不可用的项目之间的引用 System.Data 的版本。您可以使用解决方案资源管理器进行检查。两个项目是否使用相同的版本?

    【讨论】:

    • 谢谢;两个项目都引用相同的 dll:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll
    【解决方案6】:

    问题与未在 .net 4.0 版中运行的应用程序有关

    根据以下页面: http://www.connectionstrings.com/sql-server-2012#sqlconnection

    您需要 .net 4.0 及更高版本才能使用命名管道:

    .NET 框架不支持 Server=(localdb) 语法 4.0.2 之前的版本。但是,命名管道连接将起作用 将 4.0.2 之前的应用程序连接到 LocalDB 实例。

    SqlLocalDB.exe create MyInstance
    SqlLocalDB.exe start MyInstance
    SqlLocalDB.exe info MyInstance
    

    信息提供了命名管道,然后可以在连接字符串中使用:

    <add name="conn" 
    providerName="System.Data.SqlClient" 
    connectionString="Server=np:\\.\pipe\LOCALDB#B1704E69\tsql\query"/>
    

    【讨论】:

    • 我有一个类似的问题(我收到错误 26 而不是 40),但我确实安装了 .NET Framework 4.5。我无法访问 (localdb)\v.110,但我可以通过命名管道访问数据库。我能做什么?
    • @csima 当您尝试在 Visula studio (express) 的数据库资源管理器中查看表时,连接是否有效。 VS 使用 web.config 连接进行连接,所以如果它在那里工作但不在您的应用程序中,请查看 Damith 的答案并确保您使用 .net 4 运行时运行您的应用程序,因为您可以使用旧版本运行它。跨度>
    • 是的,它确实在 Visual Studio 中工作。我的problem 与 Azure 模拟器本身无法连接的事实有关,当我尝试建立 ODBC 连接时也发生了同样的情况(尽管命名管道有效)。我选择切换到 SQLEXPRESS。感谢您的回复!
    【解决方案7】:

    另外...这可能与您在 IIS 中的设置有关。

    您的网站(会话状态)可以设置为使用 SQL Server 进行会话。也检查那里...我刚遇到这个问题,并意识到我们的 sqlbox 连接发生了变化,忘记在 IIS 上更新。

    【讨论】:

    • 这应该是一个评论(一旦你有enough reputation 添加一个)而不是一个答案。请参考Help Section 了解如何赢得声誉并因此能够发表评论。
    【解决方案8】:

    在我压缩 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA 目录后出现此错误。解压它修复了错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      相关资源
      最近更新 更多