0

データベースがあり、Save メソッドと Load メソッドの両方を簡単に実装できましたが、C# で名前を付けて保存メソッドを作成しようとすると、問題が発生します。この方法で変更を保存しようとすると、新しいファイルは作成されず、何も実行されないか、新しい名前を付けても元のファイルが上書きされます。

要約すると、.sdf ファイルを開き、変更を加えてから、新しい名前で保存します。それ、どうやったら出来るの?

私はそれを実際よりも簡単にしようとしていると推測しています-私はデータベースのプログラミングにかなり慣れていないので、ヒントをいただければ幸いです。

ありがとう!

ここで私の名前を付けて保存方法:

public static bool SaveDataAs(string fileName)
{
   thisdb.dbFileName = Path.GetFileName(fileName);
   thisdb.dbFilePath = Path.GetDirectoryName(fileName);

   thisdb.connect();
   thisdb.SaveChanges();

   return true;
}

これが私の接続方法です:

public void connect()
{
   string dbConnection = "Data Source=" + dbFilePath + "\\" + dbFileName;

   if (!Directory.Exists(dbFilePath)) { 
      Directory.CreateDirectory(dbFilePath); 
   }

   string dbProvider = "System.Data.SqlServerCe.4.0";

   Database.DefaultConnectionFactory =
            new System.Data.Entity.Infrastructure.SqlCeConnectionFactory(
                                     dbProvider, dbFilePath, dbConnection);
}
4

1 に答える 1

1

データの保存とファイル管理という 2 つの非常に異なる責任を混在させています。私は2つを分離し始めます。

データベース ファイルを管理し、その場所を認識するコンポーネントがあるとします。別のコンポーネントであるデータ アクセス レイヤー (DAL) に、ファイル マネージャーから受け取ったデータベース ファイルにデータを保存させます。コードは次のようになります。

public Repository GetRepository(string fileName)
{
   var man = new DbFileManager();
   string dbFilePath = man.GetFile(fileName);

   return new Repository(dbFilePath); // TODO: Check dbFilePath
}

DbFileManager は元のデータベース ファイルを認識し、必要な場所にコピーを作成します。新しいファイルと通信するリポジトリを返します。

リポジトリは、新しい場所の名前を受け取り、接続文字列を作成して、それを使用してコンテキストを初期化します。その後、リポジトリで任意の数の読み取りアクションと保存アクションを呼び出すことができます。

これがあなたの要件を満たしているかどうかはわかりません。元のファイルも変更したい場合は、更新が完了した後にファイルマネージャーにコピーで上書きさせることができます. このようにして、エラーが発生した場合に戻る元のファイルが常に存在します。

于 2012-04-29T10:38:27.857 に答える