2017-05-18 6 views
-3

私はプロジェクトで作業しており、Windowsベースの.NETアプリケーションです。相対パスを作成して、ファイルを別のコンピュータに移動するときに新しい接続を再度設定しないようにします。.NETアプリケーションと相対的な接続文字列がapp.configである

これまでのところ、私が行ったことがあります。私app.config

:私のプログラムで

<connectionStrings> 
    <add name="ConString" 
     connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\dbOffense.mdf;Integrated Security=True;Connect Timeout=30" 
     providerName="System.Data.SqlClient" /> 
</connectionStrings> 

。コードはどの機能にもありません。それは世界的に宣言されています。

Dim constr As String=ConfigurationManager.ConnectionStrings("ConString").ConnectionString() 
Dim con As New SqlConnection(constr) 

私のデータベースdbOffense.mdfは、私のWindowsアプリケーションOffenseDatabaseと同じフォルダにあります。私のアプリケーションのファイルが.exeであるフォルダにありません。

これまでのところ、私が読んだことはすべて実際には機能しません。

dbOffense.mdfbin/Debug/Databaseディレクトリに移動しようとしました。その後、.NETアプリケーションで新しい接続/データソースを削除して設定するたびに、同じフォルダに、dbOffense.mdfと同じフォルダの代わりに、WindowsアプリケーションOffenseDatabaseと同じフォルダにデータセットが生成されます。

誰かが助けてくれますか?

+0

"私のWindowsアプリケーションOffenseDatabaseと同じフォルダ"と言うとき、プロジェクトフォルダについて話していますか? – jmcilhinney

+0

@jmcilhinneyはい。私は現在の状況を分かち合うなら、私の問題に対する解決策を探しています。 – NoobCoder

答えて

1

実際には問題はありませんが、問題を作成しようとしています。ローカルのデータファイルはそのまま動作しますが、一部の人は気づいていないし、生活を難しくしています。これはどのように動作するのですか?

データファイルをプロジェクトに追加すると、プロジェクトフォルダに保存されます。プロジェクトフォルダ内の他のすべてのファイルと同様に、SOURCEファイルです。実行時には使用されません。データベーススキーマまたはデフォルトデータを変更する場合は、そのソースファイルで変更します。型指定されたDataSetまたはEntity Frameworkモデルなどを生成する場合は、そのファイルから行います。

プロジェクトをビルドすると、実行時に使用されるファイルが出力フォルダに配置されます。デバッグビルドの場合、それは一般にプロジェクトフォルダの下の 'bin \ Debug'であり、リリースビルドの場合は一般に 'bin \ Release'です。ソースデータファイルがコピーされ、EXEファイルおよびその他の出力ファイルと共にその出力フォルダに格納されます。これは、ソースファイルではなく、実行時に接続するコピーです。これの明らかな利点の1つは、展開する時間が来ると、リリース出力には、デバッグに使用していたファイルをクリーンアップするのではなく、ソースファイルのきれいなコピーが含まれることです。

デフォルトでは、データファイルのCopy To Output DirectoryプロパティはCopy Alwaysに設定されています。つまり、コードを変更してもう一度ビルドするたびに、 'bin \ Debug'フォルダの古いコピーが上書きされます。これは多くの人々が望むものではありません。ほとんどの人がそうではないにしても、多くの人がテストデータをビルド間で保持したいと思っています。その場合、そのプロパティをCopy If Newerに設定するだけで、ソースファイルを変更したときにのみ新しいコピーが作成されます。

したがって、物事の正常な動作を破るために何かをしない限り、接続はそのままで動作します。 "| DataDirectory |"プレースホルダは、実行時に正しいフォルダに解決されます。ソースファイルがプロジェクトに追加されていることを確認してください。唯一行う必要があるのはCopy To Output Directoryプロパティを変更することだけです。

+0

@jmcillhinney Um hi。もう一度戻ります。あなたの提案は機能しましたが、データベースが編集/更新されると元のデータに戻ります。シナリオは次のとおりです。私のマシンから、データベースのテーブルの1つに5つの入力があり、それを他のコンピュータに渡すと、1つのデータだけに戻ります。それは私が理由を知ることなく、青から出てくるだけです。 – NoobCoder

+0

私が 'Copy If Newer'に変更したものは、私の.mdfファイルと私の.xsdファイルだけでした。 – NoobCoder

+0

'Copy If Newer'はビルド時にいつでもソースファイルが作業ファイルにコピーされ、ソースファイルの最終変更時刻が作業ファイルの最終変更時刻の後であることを意味します。これは一般に、ソースファイル内のスキーマまたはデータを変更する場合にのみ発生します。この場合、作業ファイルが上書きされていることが不可欠です。 IDEは、いつでもソースファイルの最終更新時刻を設定できます。それはあなたが一緒に暮らさなければならないものです。問題が発生した場合は、作業ファイルのコピーを自分で取り出し、必要に応じて復元してください。 – jmcilhinney

関連する問題