私が現在取り組んでいるプログラムは、データを収集して SQL データベースにエクスポートします。データベースに障害が発生した場合、データを CSV ファイルに書き込むようにコーディングしました。プロセスの実行中にユーザーが情報(データベース接続など)を変更できる構成ファイルで常に実行されるアプリケーションになります。CSVファイルへの書き込みのループに入ると、アプリケーションを再起動するまでデータをデータベースに入れることができないという問題があります。関連するコードは次のとおりです。
class MethodClass
{
public static void Method()
{
while (true)
{
ConfigurationManager.RefreshSection("appSettings");
//Normally Running Code that Generates the Data
//Tries to write data to database 3 times
if (dbWrite != 2 && dbWrite != 3)
{
dbWrite = 0;
}
while (dbWrite < 2)
{
try
{
db.TblData.InsertOnSubmit(newrecord);
db.SubmitChanges();
break;
}
catch
{
dbWrite++;
}
}
if (dbWrite == 2)
{
try
{
db.TblData.InsertOnSubmit(newrecord);
db.SubmitChanges();
}
catch (Exception e)
{
dbWrite++;
log.Warn("Database Write Error", e);
BackupMethod();
}
}
if (dbWrite == 3)
{
try
{
db.TblData.InsertOnSubmit(newrecord);
db.SubmitChanges();
dbWrite = 0;
}
catch
{
BackupMethod();
log.Info("Still not writing to Database");
}
}
}
}
Class ConfigVariables
{
public static string SqlUser = ConfigurationManager.appSettings["SqlUser"];
//Other Config Variables
}
参考までに、確認したところ、問題はプログラムの実行中に構成ファイルから情報を取得することにあるようです。構成ファイルの他の値を変更しても、次にプログラムを実行するまで効果がありません。ご存知のように、Debug/Release フォルダーにある App.exe.config ファイルを編集しています。
更新: の後に変数を割り当てると、RefreshSection();
機能するようです。ただし、理由により、変数を別のクラスに入れました。これを行うより良い方法はありますか?