2017-02-19 3 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を示している:アブバケル\のAppData \ディレクトリをローミング\ユーザー\します。

このシナリオでは、上記のパスで最初に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"!

関連する問題