我试图制作是这样我的程序在发布后可以拥有本地数据库。现在我希望它能够工作,所以我可以在任何计算机上安装,所以我必须更改我的连接字符串,但我似乎无法弄清楚要改变它的是这是我现在的连接字符串
string constring = "Data Source = (LocalDB)\\MSSQLLocalDB; AttachDbFilename = \"C:\\Barcode\\Application Files\\Barcode Scanning_1_0_0_0\\BarcodeDB.mdf\"; Integrated Security = True";
在发布之前,我已经进入了应用程序文件并确保包含了BarcodeDB.mdf,但是在我发布之后,我已经看到它变为BarcodeDB.mdf.deploy。
我也进入了先决条件并添加了
SQL Server 2012 Express LocalDB
当我尝试使用我现在拥有的代码运行已发布的程序或调试器时,我收到错误:
尝试为文件C:\ Barcode \ Application Files \ Barcode Scanning_1_0_0_0 \ BarcodeDB.mdf附加自动命名的数据库失败。存在具有相同名称的数据库,或者无法打开指定的文件,或者它位于UNC共享
上
我猜我需要使用:
| DataDirectory |
但我对所有这一切都是新手,所以即使在搜索之后我也无法弄明白如何使用它,所以如果有人可以帮助解释如何,我会深深体会到我可能正在使用DataDirectory,或者如果我错了,应该使用别的东西。
对不起,如果我把这个问题构建得很糟糕,试图改善它
最好的问候汉内斯。
编辑1:这是我尝试连接和使用数据库的代码
string constring = $"Data Source = (LocalDB)\\MSSQLLocalDB; AttachDbFilename = \"{Application.ExecutablePath.ToString()}\\Application Files\\Barcode Scanning_1_0_0_0\\BarcodeDB.mdf\"; Integrated Security = True";
string Query = "SELECT Name FROM Products ORDER BY EDate;";
SqlConnection conDataBase = new SqlConnection(constring);
SqlCommand cmdDataBase = new SqlCommand(Query, conDataBase);
SqlDataReader myReader;
try
{
conDataBase.Open();
myReader = cmdDataBase.ExecuteReader();
while (myReader.Read())
{
string sName = myReader.GetString(myReader.GetOrdinal("Name"));
cbxProducts.Items.Add(sName);
cbxProducts.Sorted = false;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
答案 0 :(得分:0)
好的我假设您的项目是Windows窗体或WPF项目,如果不是请告诉我。
您的问题是您正在硬编码数据库文件的路径,该路径可能不存在,或者您的进程无法访问其位置。您发现| DataDirectory |
的内容是在Web项目中使用Web.Config文件,该文件将映射到App_Data
文件夹。
在您的情况下,您必须使用自己的应用程序可执行路径构建连接字符串。试试这段代码:
//WPF:
string constring = $"Data Source = (LocalDB)\\MSSQLLocalDB; AttachDbFilename = \"{System.Reflection.Assembly.GetExecutingAssembly().Location}\\BarcodeDB.mdf\"; Integrated Security = True";
//Windows Forms:
string constring = $"Data Source = (LocalDB)\\MSSQLLocalDB; AttachDbFilename = \"{Application.ExecutablePath.ToString()}\\BarcodeDB.mdf\"; Integrated Security = True";
答案 1 :(得分:0)
string constring = $"Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=" + Directory.GetCurrentDirectory().ToString() + "\\BarcodeDB.mdf;Integrated Security=True";
这为我修好了