【发布时间】:2012-03-17 05:14:00
【问题描述】:
在 C# windows 应用程序中,我处理 HEX 字符串。一个 HEX 字符串将有 5-30 个 HEX 部分。
07 82 51 2A F1 C9 63 69 17 C1 1B BA C7 7A 18 20 20 8A 95 7A 54 5A E0 2E D4 3D 29
目前我使用 Convert.ToInt32(string, 16) 将这个字符串解析为 N 个整数。然后我将这些 int 值添加到数据库中。当我从数据库中提取这些值时,我将它们提取为 Ints,然后将它们转换回 HEX 字符串。
将这些字符串转换为字节,然后将它们作为二进制数据类型添加到数据库中会更好吗?
编辑:
5-30 个 HEX 部分对应于特定表,其中所有部分与单个部分组成 1 条记录。例如,如果我有 5 个 HEX 值,它们对应于 1 条记录的 5 个单独的列。
编辑:
澄清(对不起):
我有 9 张桌子。每个表都有一定数量的列。
table1:30
table2:18
table3:18
table4:18
table5:18
table6:13
table7:27
table8:5
table9:11
每个表中的每一列都对应一个特定的 HEX 值。
例如,我的应用将收到一个包含 13 个 HEX 组件的“有效负载”,采用单个字符串格式:07 82 51 2A F1 C9 63 69 17 C1 1B BA C7。目前我使用这个字符串并解析各个 HEX 组件并将它们转换为整数,将它们存储在一个 int 数组中。然后我将这些 int 值存储在数据库中相应的表和列中。当我读取这些值时,我将它们作为整数获取,然后将它们转换为 HEX 字符串。
我想知道是否应该将 HEX 字符串转换为字节数组并将字节存储为 SQL 二进制变量类型。
【问题讨论】:
-
您的数据模型似乎关闭了。每个“十六进制部分”是否具有精确的含义(它始终指代特定的表和特定的列),或者它可以在表/列之间“游走”?我只是想确定是否有更深层次的问题需要先解决。
-
@BrankoDimitrijevic 请检查我的编辑,我澄清了我的数据模型。
-
"5-30 个 HEX 部分对应于特定表,其中所有部分与单个部分组成 1 条记录。例如,如果我有 5 个 HEX 值,它们对应于 1 条记录的 5 个单独列。”这似乎没有效果。您是否研究过更有效的数据存储方式?我假设 5-30 表示 5 到 30 个不同的十六进制“部分”。
-
@Ramhound 是的,这意味着 5-30 个不同的十六进制部分。一定是这样,因为数据和对应的关系,我其实对数据库结构研究了很多,但一定是这样。谢谢回复/
-
@Mausimo 问题是您是否甚至想在数据库级别转换为字节数组(如果需要,您总是可以在应用程序级别进行)?我仍然不清楚“十六进制部分”是否对这些其他表表现为外键,但 如果它们这样做,您必须将它们存储在单独的列中 - 否则 DBMS 将无法执行参照完整性。你会有很多列(30 + 18 + ... + 11),但如果这是野兽的本性,那就这样吧。
table1(等等)中是否真的需要 30 列是一个不同的问题......