0

我有一个数据库,并且我很容易实现了 Save & Load 方法,但是在尝试使用 C# 创建 Save As 方法时遇到了一些麻烦。当我尝试以这种方式保存更改时,它不会创建新文件,它只是不做任何事情,或者它会覆盖我的原始文件,即使我已经给它起了一个新名称。

总而言之,我想打开一个 .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

您混合了两种截然不同的职责:保存数据和文件管理。我将开始将两者分开。

让有一个组件来管理数据库文件并知道它们的位置。让另一个组件,您的数据访问层 (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 回答