Asp.net获取Access随机记录

 获取Access随机记录的SQL语句很多种,其中一个
select top 10 * from table order by rnd(ID)
在Access里用查询执行这条语句可以得到随机的10条记录,但是在.Net里调用这条语句的时候就不对了,始终是同样的记录而不是随机的。这是因为ADO访问Access数据库的时候会有缓存。我们采用以下语句解决这个问题
Random rnd = new Random(unchecked((int)DateTime.Now.Ticks));
int intRandomNumber = rnd.Next();
"select top 10 * from table order by rnd("+Convert.ToString(-1*intRandomNumber)+"*ID)"
这里面需要注意,采用乘法是为了不重复程度要高,可以试一下加法,效果相对差很多。另外尤其要注意ID的值,是文本还是数值无所谓,但ID的大小是很重要的,我一般习惯生成一个20位的随机数作为ID的值,但在这就导致最终得不到随机记录,之后改成自增字段,ID的值明显变小,这样才可以。也许是因为超出了该字段所能表示范围了吧。可以试试调整该字段的字段大小。

 

 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值