通过转换数据库的单位来复制数据库
本文关键字:数据库 复制 单位 转换 | 更新日期: 2024-11-06 19:57:47
我的应用程序需要一个两个单元(SI
、US
)的数据库。一旦用户选择使用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 盎司到英镑等,它们几乎完全相同的代码。