我正在尝试从我的SQL数据库读取,但是出现以下错误
System.Data.SqlClient.SqlException:'尝试为文件D:\\ Work Practise \\ Keepmefit \ Keepmefit \\ App_Data \ Keepmefit.Models.CardioDBssContext.mdf附加自动命名的数据库的尝试失败。存在具有相同名称的数据库,或者无法打开指定的文件,或者该文件位于UNC共享上。'
我已附上以下代码。我在代码上做了一些断点,并且异常来自connection.Open();
我整天都在此上花了很多时间,并尝试了许多不同的方法,但是似乎没有任何效果。任何反馈将不胜感激。
public class StrengthController : Controller
{
private const string VV = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=D:\\Work Practise\\Keepmefit\Keepmefit\\App_Data\Keepmefit.Models.CardioDBssContext.mdf;Integrated Security=True";
// GET: Rep
public ActionResult Index()
{
// SqlDataReader read = null;
SqlConnection connection = new SqlConnection(VV);
using (connection)
{
SqlCommand myCommand = new SqlCommand("SELECT * FROM Strength",
connection);
connection.Open();
SqlDataReader read = myCommand.ExecuteReader();
if (read.HasRows)
{
while (read.Read())
{
Console.WriteLine("Working" + read["Id"].ToString());
}
}
else
{
Console.WriteLine("nothing");
}
read.Close();
}
return View();
答案 0 :(得分:2)
查看连接字符串中的双反斜杠。当您定义一个以'at'(@
)开头的字符串时,如下所示:
string VV = @"C:\some\file\path";
这称为verbatim string,反斜杠(\
)字符对该语言没有任何特殊含义。将它们加倍将为您提供一个确实有两个反斜杠的字符串,并且这可能会破坏文件路径。
在某些情况下,如果仅向文件系统发送带有这样的额外\
个字符的路径,则最终还是可以的,但是对于这种情况,我怀疑多余的反斜杠会欺骗您所使用的连接对象正在尝试连接到文件共享路径(即\\server\share
),这是不允许的。