建立与SQL Server的连接时发生错误

HMR*_*HMR 13 .net sql-server connection-string web-config

如果我在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"/>
Run Code Online (Sandbox Code Playgroud)

连接有效,我可以连接到数据库资源管理器中的数据库.

当我在代码中指定connectionstring或使用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();
Run Code Online (Sandbox Code Playgroud)

从web.config获取连接字符串会产生相同的错误:

SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings
 ["conn"].ConnectionString;
Run Code Online (Sandbox Code Playgroud)

我得到的错误是"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应用程序"创建的项目时,仍然无法连接完全正常的连接

小智 13

您已正确转义了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");
Run Code Online (Sandbox Code Playgroud)


HMR*_*HMR 8

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

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

您需要.net 4.0以及最多使用命名管道:

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

SqlLocalDB.exe create MyInstance
SqlLocalDB.exe start MyInstance
SqlLocalDB.exe info MyInstance
Run Code Online (Sandbox Code Playgroud)

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

<add name="conn" 
providerName="System.Data.SqlClient" 
connectionString="Server=np:\\.\pipe\LOCALDB#B1704E69\tsql\query"/>
Run Code Online (Sandbox Code Playgroud)