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条记录,参考一下