我有一个数据库,我很容易实现Save&加载方法但是在尝试使用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);
}
答案 0 :(得分:1)
您正在混合两个非常不同的职责:保存数据和文件管理。我会开始将两者分开。
让我们有一个管理数据库文件并了解其位置的组件。让另一个组件,即您的数据访问层(DAL),将数据保存到从文件管理器接收的数据库文件中。代码可能如下所示:
public Repository GetRepository(string fileName)
{
var man = new DbFileManager();
string dbFilePath = man.GetFile(fileName);
return new Repository(dbFilePath); // TODO: Check dbFilePath
}
DbFileManager知道原始数据库文件,并负责将副本复制到所需位置。它返回一个与新文件通信的存储库。
存储库接收新位置的名称,构建连接字符串并使用它初始化上下文。然后,您可以在存储库中调用任意数量的读取和保存操作。
我不确定这是否符合您的要求。如果您还想修改原始文件,可以让文件管理器在完成更新后用副本覆盖它。这样,如果出现错误,将始终返回原始文件。