我面临以下问题。我需要在c#中捕获一系列序列号以存储在数据库中。如果这些序列号只是数字,那很好,但是我遇到了字母序列号,例如:
56AAA71064D6和56AAA7105A25
如何容纳序列号范围可能存在的不同可能性?
假设所有序列号都有一些顺序,我该如何解析它的顺序部分?
数据库已将序列号作为字符串。
答案 0 :(得分:0)
如果您的数据库假定序列号是数字,则您需要更改数据库的该部分以允许使用字母数字值,或者定义新的映射表以将外部序列号与唯一的数字ID相关联,以便您可以继续使用数字作为数据库内部表示的序列号。
您还必须添加支持,以并发安全的方式为给定的字母数字输入分发新的,唯一的内部序列号。
编辑:我的意思是,当必须在数据库中注册新的字母数字序列号时,您应该使用原子方式将记录添加到原始(数字)序列号列表并添加新表中的第二条记录,用于将数值与字母数字值相关联。如果这不是原子的,那么该计划就会崩溃。移除也必须以原子方式处理。
答案 1 :(得分:0)
如果您的序列号具有相同的宽度,那么它很容易......
你必须使用string.compare方法来获得范围。
int MaxLength = 20;
private string Pad(string val){
if(val.Length < 20){
val = new String('0', MaxLength - val.Length) + val;
}
return val;
}
public bool IsBetween(string num, string start, string end){
num = Pad(num);
start = Pad(num);
end = Pad(num);
return String.Compare(num,start)>=0 && String.Compare(num,end)<=0;
}
如果您对所有序列号进行排序,那么您可以轻松获取范围。
如果它们的宽度不同,则必须在较小的长度字符串之前填充0,以使它们具有相同的大小。