随机显示Access数据库记录

从网上找到随机取出n条记录的方法:
Sql server:select top n * from 表 order by newid()
Access:SELECT top n * FROM 表 ORDER BY Rnd(id)
mysql:Select * From 表 Order By rand() Limit n

我用的是Access数据库,要从tbsms表中每次返回一条不同的幽默故事,查询语句如下:
string sql = "SELECT top 1 * from tbsms  where type ='幽默故事' order by rnd(id)  ";
执行完查询语句,我是马上断开连接的,发现每次都返回相同的记录,

后来我执行查询语句后,不断开连接,就可以每次返回不同的记录了.

与Access数据库一直保持连接不是很妥当,后来找到孟子E章的文章,随机显示数据库记录

System名称空间有一个Random类,用来产生随机数。本文就介绍利用这个Random类来随机显示数据库记录。

Random类有一个重载方法叫Next,它可以产生随机数,它允许输入两个参数,以产生这两个数之间的随机数。例如:

Random R = new Random();
Random.Next(1,100);


将会在产生1-100之间的随机数。

要随机显示数据库记录,需要知道数据库最大记录数和最小记录数。

int RecNo=0,MaxRecNo,MinRecNo;
Random R = new Random();
SqlDataReader DR;
SqlConnection CN = newSqlConnection("Server=Mengxianhui;Database=Northwind;uid=sa");
CN.Open();
SqlCommand Cmd = new SqlCommand("select Max(ProductId) as MaxProdid ,Min(ProductId) as MinProdId from Products",CN);
DR= Cmd.ExecuteReader();
DR.Read();
MaxRecNo = (int)DR["MaxProdid"] ;
MinRecNo = (int)DR["MinProdid"] ;
RecNo = R.Next(MinRecNo,MaxRecNo);


然后得到随机得到记录。

Cmd = new SqlCommand("select * from Products Where ProductID = " + RecNo,CN);
DR = Cmd.ExecuteReader();
DR.Read();
Response.Write("今日的产品名称: " +DR["ProductID"] + " - " + DR["ProductName"] + "");
CN.Close();



我认为他的方法只能对id号是连续的才有效,修改了一下自己的方法,搞定.

public string Joke(string word ,out string message)
        
{
            message 
= "";                    System.Random random = new Random();//Random类有一个重载方法叫Next,它可以产生随机数,它允许输入两个参数,以产生这两个数之间的随机数
            


            
//string sql = "SELECT top 1 * from tbsms  where type ='幽默故事' order by rnd(id)  ";
            string sql = "SELECT * from tbsms  where type ='幽默故事'   ";
            System.Data.DataTable dt 
= CommonClass.AccessSelect(sql,out message);

            
if(dt.Rows.Count>0)
            
{
                
int RecNo= random.Next(0,dt.Rows.Count-1);
                
return dt.Rows[RecNo]["Content"].ToString();
            }

            
else
                
return "没有找到类型\""+word+"\"的短信";
        }
 


 

posted @ 2006-04-16 16:44  墨尔  阅读(655)  评论(0)    收藏  举报