需要帮助为 SQL Server CE 数据库创建“另存为”方法
本文关键字:另存为 创建 方法 数据库 CE 帮助 SQL Server | 更新日期: 2023-09-27 18:32:33
我有一个数据库,我已经轻松地实现了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);
}
您混合了两种截然不同的职责:保存数据和文件管理。我会开始将两者分开。
让有一个管理数据库文件并了解其位置的组件。让另一个组件(数据访问层 (DAL((将数据保存到它从文件管理器接收的数据库文件中。代码可能如下所示:
public Repository GetRepository(string fileName)
{
var man = new DbFileManager();
string dbFilePath = man.GetFile(fileName);
return new Repository(dbFilePath); // TODO: Check dbFilePath
}
DbFileManager 知道原始数据库文件,并负责将副本复制到所需位置。它返回与新文件通信的存储库。
存储库接收新位置的名称,生成连接字符串并使用它初始化上下文。然后,您可以在存储库上调用任意数量的读取和保存操作。
我不确定这是否满足您的要求。如果您还想修改原始文件,则可以在完成更新后让文件管理器用副本覆盖它。这样,如果出现错误,将始终有一个原始文件要返回。