14

如果我在 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:找不到网络路径”

在跟踪是说:

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

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

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

感谢您阅读我的帖子,希望您能帮助我解决这个问题。

更新:

我尝试了以下事情:

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

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

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

4

8 回答 8

14

You've properly escaped the db filename but not the datasource, therefore it tries to connect to a datasource named "(localdb)11.0", which (most likely) doesn't exist.

Try escaping it properly like this:

SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+
"Initial Catalog=MyDB; Integrated Security=True; "+
"MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf");
于 2013-04-10T11:47:54.047 回答
8

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

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

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

4.0.2 之前的 .NET 框架版本不支持 Server=(localdb) 语法。但是,命名管道连接将用于将 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"/>
于 2013-04-17T07:52:11.380 回答
3

您是否尝试过使用 '.\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"/>
于 2013-04-16T16:05:11.893 回答
1

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

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

在此处输入图像描述

于 2013-04-16T13:28:59.810 回答
1

只是为了笑而不是把 (localdb) 放一个句号'.'。这样它看起来像

Data Source=.\v11.0;

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

于 2013-04-15T18:25:14.140 回答
1

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

在此处输入图像描述

于 2013-04-17T02:31:18.043 回答
0

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

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

于 2014-03-20T16:54:21.350 回答
0

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

于 2015-04-21T21:08:15.723 回答