之前客户的需求是将表中的字段rec_id作为主键(INT型`自增),我写了几天的程序....
昨天客户改变主意了,要将rec_id字段类型改为char(15),因为要往字段里写入的信息是15位随机数。
问题来了 1.这种情况下rec_id还适合做主键么?
2.尝试了下用rec_id做主键,每两秒向数据库写一次信息。因为数据是随机生成的,所以大小是没有规律的(照成没有顺序`乱插得现象)。而且程序还不稳定容易出错。我想要的效果是数据一行一行按顺序写下去,而不是这种大小随机(数据库会根据从小到大的顺序排列`可是这样排列的话我前面的程序许多功能就白做了)`到数据库里乱插的情况。希望高手可以指点一下,万分感激!!!!!
昨天客户改变主意了,要将rec_id字段类型改为char(15),因为要往字段里写入的信息是15位随机数。
问题来了 1.这种情况下rec_id还适合做主键么?
2.尝试了下用rec_id做主键,每两秒向数据库写一次信息。因为数据是随机生成的,所以大小是没有规律的(照成没有顺序`乱插得现象)。而且程序还不稳定容易出错。我想要的效果是数据一行一行按顺序写下去,而不是这种大小随机(数据库会根据从小到大的顺序排列`可是这样排列的话我前面的程序许多功能就白做了)`到数据库里乱插的情况。希望高手可以指点一下,万分感激!!!!!
1
要将rec_id字段类型改为char(15),因为要往字段里写入的信息是15位随机数。不适合做主键了吧,随机数,你想不想重复啊,如果只做流水号,可以作为主键2
其实你可弄一个时间列呀,怎么插入,最后排序一下就行了
这样行吗?
public static string RandCodeNo0(int n, ref string y)
{ char[] arrChar = new char[] { '1', '2', '3', '4', '5', '6', '7', '8', '9' }; StringBuilder num = new StringBuilder(); Random rnd = new Random(DateTime.Now.Millisecond); for (int i = 0; i < n; i++)
{
num.Append(arrChar[rnd.Next(0, arrChar.Length)].ToString());
}
y = num.ToString();
return y;
}
/// <summary>
/// 生成对应的编号
/// </summary>
/// <returns>生成的编号</returns>
public string GetId()
{
string id = DateTime.Now.ToString("yyyyMMddhhmmss");
Random rd = new Random();
id += rd.Next(100, 999);
return id;
}
不过这是17位的
你改一下就行了,其实主要是要上时间这样重复性就将低了,至少现在我的数据还没有重复的
你可以试试