public int GenPurchaseOrderNum()
{
Random random = new Random();
_uniqueNum = random.Next(13287, 21439);
return UniqueNum;
}我从db的PONumber列中删除了唯一约束,因为员工应该只在交易设置时生成P.O. #。否则,邮政信箱编号将为0。
采购订单编号过去具有唯一约束,这会强制员工在所有情况下生成采购订单,这样数据库就不会抛出唯一约束错误。
由于我删除了unique约束,所以任何没有P.O.的引用都将携带0值。否则,将为P.O. #生成唯一值。然而,我在db中没有唯一的约束,这使得我很难知道应用程序生成的P.O. #是否是唯一的。
我该怎么办?
我希望我的问题足够清楚。
发布于 2010-06-18 03:30:12
GUID在开销方面有点高。具体地说,听起来您需要一个人类可读的PO#数字,这使得GUID不切实际。我更倾向于使用下面的场景。
这就是两万英尺的视角。
发布于 2010-10-04 19:57:53
每次执行new Random()时,它都会被初始化。这意味着在一个紧凑的循环中,你会多次得到相同的值。您应该保留单个Random实例,并在同一实例上继续使用Next。
//Function to get random number
private static readonly Random getrandom = new Random();
private static readonly object syncLock = new object();
public static int GetRandomNumber(int min, int max)
{
lock(syncLock) { // synchronize
return getrandom .Next(min, max);
}
}发布于 2010-06-18 03:22:27
如果你真的想要一个随机值,而不是返回一个int,你可以使用GUID。这些保证是唯一的:
GUID是一个128位整数(16字节),可在需要唯一标识符的所有计算机和网络中使用。这样的标识符被复制的概率非常低。
另一种方法是保留上一次使用的编号的记录,并在每次需要新的PO时简单地增加它。确保在它周围设置了锁,这样两个进程就不会同时尝试递增它。
https://stackoverflow.com/questions/3064881
复制相似问题