如何指向数据库c#wpf localdb的相对路径

如何指向数据库c#wpf localdb的相对路径,c#,wpf,localdb,C#,Wpf,Localdb,我试图做备份和恢复作为一个开始,我试图得到备份数据库,所以写一个这样的代码 try { string cbdfilename = "c:\\Bbcon.bak"; SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\v11.0;AttachDbFilename=|DataDirectory|\\BbCon.mdf;Integrated Security=True;Connect Timeout=30;");

我试图做备份和恢复作为一个开始,我试图得到备份数据库,所以写一个这样的代码

try
{
    string cbdfilename = "c:\\Bbcon.bak";
    SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\v11.0;AttachDbFilename=|DataDirectory|\\BbCon.mdf;Integrated Security=True;Connect Timeout=30;");
    string sql = "Backup database @DBNAME to Disk = @FILENAME with Format";
    SqlConnection.ClearAllPools();
    SqlCommand cmd = new SqlCommand(sql, con);
    cmd.Parameters.AddWithValue("@DBNAME", "BbCon");
    cmd.Parameters.AddWithValue("@FILENAME", cbdfilename);
    con.Open();
    try
    {
        cmd.ExecuteNonQuery();
    }
    catch(Exception ex)
    {
        MessageBox.Show("Backup DB failed" + ex.ToString());
    }
    finally
    {
        con.Close();
        con.Dispose();
    }
}
catch (SqlException ex)
{
    MessageBox.Show(ex.Message);
}
finally
{
    if (con.State == ConnectionState.Open)
    {
        con.Close();
    }
}
但是当我运行这段代码时,我得到一个错误的数据库BbCon不存在检查你的数据库我不知道问题出在哪里但我想我给了错误的数据库路径我知道正确的数据库路径它是这样的

C:\Users\Mahdi Rashidi\AppData\Local\Apps\2.0\NOL11TLW.9XG\CZM702AQ.LPP\basu..tion_939730333fb6fcc8_0001.0002_fd707bbb3c97f8d3

但是这个项目是为其他一些客户端设计的,所以当我将此软件安装到其他计算机时,路径会发生变化,所以我会出错,所以我恳请大家帮助我找到一个更好的解决方案,以编程方式创建备份。我建议您创建一个app.config文件,并将备份目标路径放在那里

我不久前所做的(动态加载程序集,但这段代码允许您根据正在运行的程序集检索路径位置)类似于:

(别忘了将System.Reflection添加到您的使用列表中)

从那时起,您可以连接“数据路径”并将数据保存在那里


希望有帮助。

这有帮助,但现在我遇到了另一个错误无法打开备份设备,如果我的问题让你生气,我很抱歉。第二个问题很好。通过将路径更改为c:\users\Public来纠正评论中的错误很好,此网站的目标是相互帮助。发布完整的代码以进行深入分析,还有一个问题:1)您是否试图在本地计算机(运行应用程序的地方)上进行备份?2) 应用程序和数据库服务器是否在同一台计算机上运行?感谢您。第一个问题的答案是“是”,我正在尝试备份一台本地计算机第二个问题的答案是“是”,数据库和应用程序在同一台计算机上数据库是“localdbOk”,您是否检查了生成的字符串(sql变量)并尝试在sql Server Management Studio上执行它?您设置的路径是否可动态写入(您是否有权限在该文件夹上写入)?一个愚蠢的问题:目标文件夹是否存在?
// get the current assembly from cache
var currentAssembly = Assembly.GetEntryAssembly();

// if current assembly is null
if (currentAssembly == null)
{
    // get the current assembly from stack trace
    currentAssembly = new StackTrace().GetFrames().Last().GetMethod().Module.Assembly;
}

// get the assemblies path (from returned assembly)
assembliesPath = Path.GetDirectoryName(currentAssembly.Location);