asp.net执行sql随机读取access记录一样解决办法

  网上找的随机读取access数据库的sql如下

select top 10 * from table order by rnd(ID)--ID为自动增长的列

  在access查询分析里面执行上面的sql可以得到随机的10条记录,但是在asp.net环境下用ado.net执行上面的sql语句,无论怎么刷新页面,得到的都是相同记录,不会变化。

  这是因为ADO.NET访问Access数据库的时候会有缓存。可以使用以下语句解决这个问题

Random rnd = new Random(unchecked((int)DateTime.Now.Ticks));
int intRandomNumber = rnd.Next();
string sql="select top 10 * from table order by rnd("+Convert.ToString(-1*intRandomNumber)+"*ID)"

  这里面需要注意,采用乘法是为了不重复程度要高,可以试一下加法,效果相对差很多。另外尤其要注意ID的值,是文本还是数值无所谓,但ID的大小是很重要 的,我一般习惯生成一个20位的随机数作为ID的值,但在这就导致最终得不到随机记录,之后改成自增字段,ID的值明显变小,这样才可以。也许是因为超出 了该字段所能表示范围了吧。可以试试调整该字段的字段大小。

来源:http://blog.csdn.net/jjhua/article/details/2709087

评论(0)网络
阅读(48)喜欢(0)不喜欢(0)Asp.Net/C#/WCF