我面临以下问题。我需要在c#中捕获一系列序列号,以便存储在数据库中。如果这些序列号只是数字,那也没问题,但我遇到过由字母数字组成的序列号,例如:
56AAA71064D6和56AAA7105A25
如何适应序列号范围可能存在的不同可能性?
假设所有序列号都有一定的顺序,我如何解析它的连续部分呢?
数据库已经将序列号作为字符串。
发布于 2010-10-21 01:03:27
如果你的序列号有相同的宽度,那么很容易……
您必须使用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;
}如果你对所有的序列号进行排序,那么你就可以很容易地获得range。
如果它们的宽度不同,那么你必须在较小的长度字符串之前填充0,以使它们都相同大小。
发布于 2010-10-21 00:57:50
如果您的数据库假设序列号是数字,则需要更改数据库的该部分以允许字母数字值,或者定义一个新的映射表以将外部序列号与唯一的数字ID相关联,以便您可以继续使用数字作为数据库中序列号的内部表示形式。
您还必须添加支持,以便以一种并发安全的方式为给定的字母数字输入分发一个新的、唯一的内部序列号。
编辑:我的意思是,当一个新的字母数字序列号必须在数据库中注册时,您应该使用一个事务来执行此操作,该事务自动向原始(数字)序列号列表添加一条记录,并在新表中添加第二条记录,该记录将数字值与字母数字值相关联。如果这不是原子的,那么方案就会崩溃。删除也必须以原子方式处理。
https://stackoverflow.com/questions/3980341
复制相似问题