发布C#

时间:2017-10-05 09:00:38

标签: c# database database-connection

我试图制作是这样我的程序在发布后可以拥有本地数据库。现在我希望它能够工作,所以我可以在任何计算机上安装,所以我必须更改我的连接字符串,但我似乎无法弄清楚要改变它的是这是我现在的连接字符串

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);
        }

2 个答案:

答案 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";

这为我修好了