2017-02-19 58 views
0

我已经创建了一个WPF 4.5 .NET应用程序,它具有数据库备份功能。在调试时,函数和备份工作正常,但是当我将它发布到ClickOnce中并将其安装到目标机器中时,除备份之外的所有工作都将正常工作,因为ClickOnce模糊了应用程序文件夹位置,因此备份语句运行时间过长!有没有办法让备份声明更短?这里是我的代码和错误,我得到: 代码:在ClickOnce中备份localDB数据库

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. 

回答

0

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

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

但是,我终于选择了这种方式,并成功地发布(发布)我的服务。

根据我的经验,|数据目录|根据具体情况指示不同的地方,换句话说,它并不总是相同的。 而且我可以读取(SQL Select命令)数据库| Data Directory |在connectionString中设置,但不能插入或更新数据库。你可以发现一些人通过interent搜索有这个困难。我想当我们设置|数据目录|在connectionString中,数据库扮演只读数据文件的角色,如| Data Directory |的细微差别。

取而代之的是| Data Directory |,我选择了比较明显的路径,这个路径总是表示同一个地方(目录)。

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

以上环境变量总是表示C:\用户\阿布巴卡尔\应用程序数据\漫游目录。

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

而且进一步,你可以创建自己的额外的目录像ConnectionString中如为MyBackup,

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

我找不到微软如何的正式文件|资料目录|作品但失败。了解|数据目录|将是你的钥匙,否则,有像我的情况下的替代方式。 我的情况也是WPF,ClickOnce的,SQL数据库(它的LocalDB,但我改变了,因为远程网络的正常SQL数据库)问题解决了

+0

不工作!问题仍然存在,因为我必须在备份语句中使用Application.StartupPath!连接字符串很好 – user7586828

+0

我知道将localDB附加到项目和发布的过程。也许,您需要了解|数据目录|。祝你好运 ! –

0

通过在连接字符串中添加Initial catalog=whdb,然后用刚更换的完整路径Application.StartupPath + @"\whdb.mdf"数据库名称“whdb”!