通过转换数据库的单位来复制数据库

本文关键字:数据库 复制 单位 转换 | 更新日期: 2024-11-06 19:57:47

我的应用程序需要一个两个单元(SIUS)的数据库。一旦用户选择使用SI单位,在退出时我需要将值转换为US并将其保存在美国数据库中

假设用户选择(SI 单位)并对其中一个表单上的变量 THickness 进行一些编辑。

退出时,我也应该将它们保存在 SI 单位数据库中。目前程序执行所有保存输入。和其他东西只在一个数据库中。

关于如何实现这一目标的任何投入都将是好的

这是我到目前为止所做的在退出时,为架构创建另一个连接,

private void btnExit_Click(object sender, EventArgs e)
{
    DbConnection c = CreateConnectionForSchemaCreation("STAR-SI.Sqlite");
    this.Close();   
}
public DbConnection CreateConnectionForSchemaCreation(string fileName)
{
    var connOther = new SQLiteConnection();
    connOther.ConnectionString = new DbConnectionStringBuilder()
    {
        {"Data Source", fileName},
        {"Version", "3"},
        {"FailIfMissing", "False"},
    }.ConnectionString;
    connOther.Open();
    return connOther;
}

通过转换数据库的单位来复制数据库

如果用户多次

来回转换怎么办? 似乎每次用户切换单元时都必须重新生成数据库,这非常复杂。

SI 单位的每个可能选择与美国测量中的相应选择之间是否存在明确的 1:1 映射?

我会建议以下其中之一:

  • 如果存在 1:1 映射,则以 SI 或美制单位之一存储,并在需要时转换为应用层中的另一个
  • 单位
  • 如果没有 1:1 映射,请在单个数据库中为 SI 和 US 单位提供可为空的列。 将用户的选择存储在相应的列中,并使另一列为空。

错误的方法,您应该将 UnitOfMeasure 字段与值一起存储。

例如

"Weight 1",1,"kilogram"
"Weight 2",2.2,"lb"

然后在用户的配置文件上,他们优先选择 SI 或 US,您可以根据需要进行数据操作进行转换。

几个数据库函数,一个额外的列,一个用于保存UOM的表,以及一个用于转换的表,工作完成。

更不用说您可以处理系统转换,例如 16 盎司到英镑等,它们几乎完全相同的代码。