各位大哥大姐大嫂大妹子们。。就是这段代码。。单独把sql语句拿出来查询没问题。。但是放到程序中就有问题。。问题在下面描述。。这里太短了。。
public static DataTable GetAllData() { DataTable dt = new DataTable(); try { DataRow dr; string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= E:\Code\DriverExam\DriverExam\App_Data\db.mdb;"; OleDbConnection odcConnection = new OleDbConnection(strConn); odcConnection.Open(); OleDbCommand odCommand = odcConnection.CreateCommand(); odCommand.CommandText = "select * from ( select top 100 * from shiti2012 order by rnd(id) ) order by zhangjie,id"; //= "select top 100 * from shiti2012 where bmp is not null order by rnd(id)"; OleDbDataReader odrReader = odCommand.ExecuteReader(); for (int i = 0; i < odrReader.FieldCount; i++) { DataColumn dc; dc = new DataColumn(odrReader.GetName(i)); dt.Columns.Add(dc); } while (odrReader.Read()) { dr = dt.NewRow(); for (int i = 0; i < odrReader.FieldCount; i++) { dr[odrReader.GetName(i)] = odrReader[odrReader.GetName(i)].ToString(); } dt.Rows.Add(dr); } odrReader.Close(); odcConnection.Close(); return dt; } catch { return dt; } }
select * from ( select top 100 * from shiti2012 order by rnd(id) ) order by zhangjie,id
Random rnd = new Random();int r = rnd.Next();OleDbCommand odCommand = odcConnection.CreateCommand(); odCommand.CommandText = "select * from ( select top 100 * from shiti2012 order by rnd(" + r.ToString() + ")) order by zhangjie,id";
[解决办法]
你有试过,把你这个sql,直接放到access里执行,然后记录下结果,接着重新打开access,一样执行这个sql,比较2个结果是不是一样的。
[解决办法]
"select * from ( select top 100 * from shiti2012 order by rnd(time()-id) ) order by zhangjie,id";
这样重复概率估计会小点,不过效率不高。