日期:2014-05-18  浏览次数:20390 次

asp.net程序从数据库取随机记录
select   top   3   *   from   Users   where   u_project   =   '学生 '   order   by   newid()

在数据库中跑这条sql语句的时候,查出来的结果确实是随机的三条数据
如:
u_project     |
学生C             |
学生E             |
学生A             |

但在我程序中
SqlDataAdapter   da   =   new   SqlDataAdapter( 'SelectString ',con);
DataSet   ds   =   new   DataSet();
da.Fill(ds);
return   ds    

用DataSet将取出的三个 '学生 '分别为三个TextBox.Text赋值后.
三个TextBox显示的则有重复的数据

请问为什么在数据库中跑这条语句,取随机记录的时候,显示的没有相同数据.
为什么在程序中调用这条sql语句的时候却会取到相同的数据?

其实我要实现的就是随机从数据库中取数据(不能取重复的值),然后用三个TextBox显示出来!
望大家能够帮帮我,这问题怎么解决`?谢谢!


------解决方案--------------------
感觉你这代码不能做到真的随机,你这代码好像只是取了前三条然后其顺序只是打乱了而已.重复的问题我也遇到过,但应该跟三层什么的没关系,我建议你这样,从数据库中取多条数据,将其放到DataSet,再用程序实现一个取随机的功能,从DataSet里再取出想要的N条数据

我自己做过的一个:


public int[] Randomint(int aa, int bb, bool zero)
{
bool isaddzero = zero;
if (bb > aa)
{
Random k = new Random();
int[] d = new int[aa];
for (int i = 0; i < aa; i++)
{
if (isaddzero)
{
i = i + 1;
isaddzero = false;
}
int r = k.Next(bb);
if (Ran_1(r, d))
{
d[i] = r;
}
else
{
i--;
}
}

return d;
}
else
{
int[] l = new int[bb];
for (int j = 0; j < bb; j++)
{
l[j] = j;
}
return l;
}
}
public int[] Randomint(int aa, int bb)
{

if (bb > aa)
{
Random k = new Random();
int[] d = new int[aa];
for (int i = 0; i < aa; i++)
{
int r = k.Next(bb);
if (Ran_1(r, d))
{
d[i] = r;
}
else
{
i--;
}
}

return d;
}
else
{
int[] l = new int[bb];
return l;
}
}
public bool Ran_1(int a, int[] b)
{

foreach (int k in b)
{
if (a == k)
{
return false;
}

}
return true;
}


aa和bb都是某个数组的长度,如果aa小于bb,则返回bb中随机的aa条记录,参考一下