【问题标题】:Backup localDB database in ClickOnce在 ClickOnce 中备份 localDB 数据库
【发布时间】:2017-02-19 00:48:35
【问题描述】:

我创建了一个带有数据库备份功能的 WPF 4.5 .NET 应用程序。调试时功能和备份工作正常,但是当我在 ClickOnce 中发布它并将其安装到目标计算机时,除了备份不起作用之外,一切正常,因为 ClickOnce 混淆了应用程序文件夹位置,因此备份语句的工作时间太长!有没有办法使备份语句更短?这是我的代码和我得到的错误: 代码:

SaveFileDialog sfd = new SaveFileDialog();
string stringCon = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\whdb.mdf;Integrated Security=True";
string dbPath = Application.StartupPath + @"\whdb.mdf";
if (sfd.ShowDialog() == DialogResult.OK)
{
    using (SqlConnection conn = new SqlConnection(stringCon))
    {
        string backupStmt = string.Format(@"backup database @whdb to disk='{0}' WITH INIT ", sfd.FileName);
        using (SqlCommand sqlComm = new SqlCommand(backupStmt, conn))
        {
            sqlComm.Parameters.AddWithValue("@whdb", dbPath); 
            conn.Open();
            sqlComm.ExecuteNonQuery();
            conn.Close();
        }
    }
)

**************异常文本**************

System.Data.SqlClient.SqlException (0x80131904): Invalid database name 'C:\Users\Abubaker\AppData\Local\Apps\2.0\52WR4JTO.12O\D6M4D7OQ.Z3D\sa3a..tion_fef19ab42c2b8f22_0001.0000_9fc10c82bbf23ed2\whdb.mdf' specified for backup or restore operation.
BACKUP DATABASE is terminating abnormally.

【问题讨论】:

    标签: c# wpf clickonce database-backups


    【解决方案1】:

    whdb.mdf 数据库文件是由另一个现有应用程序创建的吗?而您的 WPF 应用程序仅用于备份现有的 whdb.mdf 数据库?

    我也为这种情况挣扎了好几天。我试过 |数据目录|和 Application.StartupPath 以及您发现的其他一些方法。

    不过,我最终还是选择了这种方式,并成功启动(发布)了我的服务。

    根据我的经验,|数据目录|根据情况表示不同的地方,换句话说,它并不总是相同的。 我可以使用 |Data Directory| 读取(SQL Select 命令)数据库在 connectionString 中设置但无法插入或更新数据库。您可以通过在互联网上搜索找到一些人遇到这种困难。我想当我们设置 |数据目录|在connectionString中,数据库就像|Data Directory|的细微差别一样,扮演着只读数据文件的角色。

    我选择了更明显的路径而不是 |Data Directory|,它始终指示相同的位置(目录)。

    @"Data Source=(LocalDB)\v11.0;AttachDbFilename=" + Environment.GetEnvironmentVariable("APPDATA") + @"\whdb.mdf;Integrated Security=True";
    

    上面的环境变量总是表示 C:\Users\Abubaker\AppData\Roaming 目录。

    对于这种情况,您需要先创建具有上述路径的 whdb.mdf 数据库文件。

    此外,您还可以创建自己的附加目录,例如 mybackup 并使用 connectionString 作为,

    @"Data Source=(LocalDB)\v11.0;AttachDbFilename=" + Environment.GetEnvironmentVariable("APPDATA") + @"\mybackup" + @"\whdb.mdf;Integrated Security=True";
    

    我找不到来自 Microsoft 的官方文档 |Data Directory|工作但失败了。了解 |数据目录|将是您的关键,否则,还有像我这样的替代方法。 我的案例也是WPF、ClickOnce、SQL数据库(本来是localDB但是因为远程联网我改成了普通的SQL数据库)

    【讨论】:

    • 不工作!问题仍然存在,因为我必须在备份语句中使用 Application.StartupPath!连接字符串很好
    • 我知道将 localDB 附加到项目和发布的过程。也许,您需要了解|数据目录|。祝你好运!
    【解决方案2】:

    通过在连接字符串中添加Initial catalog=whdb 解决问题,然后将完整路径Application.StartupPath + @"\whdb.mdf" 替换为仅数据库名称“whdb”!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-15
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      相关资源
      最近更新 更多