如果我在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应用程序”创建的项目时,仍无法连接完全正常的连接
答案 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时,这就是您收到此错误的原因。希望这可以帮助。
答案 5 :(得分:1)
检查有效的空项目与不起作用的项目之间的参考System.Data的版本。您可以使用解决方案资源管理器进行检查。两个项目都使用相同的版本吗?
答案 6 :(得分:0)
此外......这可能与您在IIS中的设置有关。
您的网站(会话状态)可以设置为使用SQL Server进行会话。检查那里...我刚刚遇到这个问题,并意识到我们的sqlbox连接已更改,忘记在IIS上更新。
答案 7 :(得分:0)
压缩 C:\ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA 目录后出现此错误。解压缩它修复了错误。