写入第一次发布,但之后不会覆盖

时间:2015-09-24 14:04:27

标签: c# visual-studio publish

我已经通过Visual Studio发布了一个使用访问数据库的应用程序,数据库最初是空的,并且在运行已发布的应用程序时,我已经将数据添加到数据库中。

我现在想用我对表单所做的更改来更新应用程序,并添加一个新表并在原始表中添加列

但是我想保留数据库中新添加的数据,到目前为止我找不到一种方法,表单保持不变或数据库被擦除

任何人都知道如何做到这一点?

1 个答案:

答案 0 :(得分:0)

这是一个小的(未经测试的!!)片段。你将不得不调整一些值,但它应该让你开始。它适用于Access互操作,复制数据库,从新部署的数据库中删除所有表,从旧数据库中导入它们,然后删除临时文件。

var dbPath = "[path to your db]";

var guid = Guid.NewGuid().ToString();
var tempPath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), guid);
System.IO.Directory.CreateDirectory(tempPath);
var tempDb = Path.Combine(tempPath, "[yourdbname]");
System.IO.File.Copy("[path to your db]", tempDb, true);

//copy the old database to this tempPath
//Overwrite the original old db with your new one
var access = new Microsoft.Office.Interop.Access.Application();
access.OpenCurrentDatabase(filepath: "[path to your db]", Exclusive: true, bstrPassword: "");
var newdb = access.CurrentDb();
var tableList=new List<string>();
foreach (TableDef table in newdb.TableDefs)
{
    tableList.Add(table.Name);
    newdb.TableDefs.Delete(table.Name);
}
foreach (var table in tableList)
{
    access.DoCmd.TransferDatabase(AcDataTransferType.acImport, DatabaseTypeEnum.dbVersion140, tempDb,
        AcObjectType.acTable, table, table, false, false);
}
System.IO.Directory.Delete(tempPath, true);