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

时间:2013-04-10 11:43:27

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

如果我在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的连接   服务器)]

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

这可能是身份验证问题吗?如果是这样,为什么没有信息的错误?

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

更新

我尝试过以下事项:

鉴于该组每个人都拥有mdf和ldf文件的完全权限

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

没有运气,在将代码复制到使用“ASP.NET空Web应用程序”创建的项目时,仍无法连接完全正常的连接

8 个答案:

答案 0 :(得分:13)

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

尝试正确地逃避它:

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

答案 1 :(得分:8)

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

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

您需要.net 4.0及以上才能使用命名管道:

  

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

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

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

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

答案 2 :(得分: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"/>

答案 3 :(得分:1)

只是为了轻笑而不是把(localdb)放一段时间'.'。所以它看起来像

Data Source=.\v11.0;

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

答案 4 :(得分:1)

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

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

enter image description here

答案 5 :(得分:1)

检查有效的空项目与不起作用的项目之间的参考System.Data的版本。您可以使用解决方案资源管理器进行检查。两个项目都使用相同的版本吗?

enter image description here

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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