2012-04-27 56 views
0

我有一個數據庫,並且我很容易實現保存&加載方法,但是在嘗試使用C#創建另存爲方法時遇到了一些麻煩。當我試圖以這種方式儲存更改時,它不會創建一個新文件,它只是不會執行任何操作,或者會覆蓋原始文件,即使我已給它一個新名稱。需要幫助爲SQL Server CE數據庫創建「另存爲」方法

總而言之,我想打開一個.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); 
} 
+0

這是不是很清楚你在這裏,但除此之外,這是什麼問題? – 2012-04-27 22:43:53

+0

編輯過的文章使其更加清晰。 – 2012-04-28 05:00:23

回答

1

你混合兩個非常不同的職責:保存數據和文件管理。我會開始分離這兩個。

讓我們有一個組件管理數據庫文件並知道它們的位置。讓另一個組件(數據訪問層(DAL))將數據保存到從文件管理器接收的數據庫文件中。代碼可能如下所示:

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

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

DbFileManager知道原始數據庫文件並負責將副本放入所需的位置。它返回一個與新文件進行通信的Repository。

存儲庫接收新位置的名稱,建立連接字符串並用它初始化上下文。然後,您可以調用存儲庫中的任意數量的讀取和保存操作。

我不確定這是否涵蓋您的要求。如果你想修改你的原始文件,你可以讓文件管理器在你完成更新後用副本覆蓋它。這樣,如果出現錯誤,總會有一個原始文件返回。

+0

非常好,謝謝!正是我需要讓我朝着正確的方向前進! – 2012-04-30 17:52:13