日期:2011-02-05 浏览次数:20522 次
由于使用ADO访问Access数据库会有缓存,这在随机提取数据库数据时,例如:sql="select top 10 Title,objectGuid from Document Order By Rnd(id)",将得不到随机记录,下面的例子可以克服这一缺陷,实现数据库的随机读取。
C#:
<%@ Page Language="C#" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script runat="server"> 
protected void Page_Load( object sender, EventArgs e ) 
{ 
Random rnd = new Random(unchecked((int)DateTime.Now.Ticks)); 
int intRandomNumber = rnd.Next(); 
string ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= DataDirectory aspxWeb.mdb;Persist Security Info=True"; 
string sql = "select top 10 Title,objectGuid from Document Order By Rnd(" + (-1 * intRandomNumber) + "*id)"; 
System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(ConnectionString); 
cn.Open(); 
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(sql, cn); 
System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); 
GridView1.DataSource = dr; 
GridView1.DataBind(); 
dr.Close(); 
cmd.Dispose(); 
cn.Dispose(); 
cn = null; 
} 
</script> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title>随机读取Access数据库记录</title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> 
<Columns> 
<asp:HyperLinkField DataNavigateUrlFields="objectGuid" HeaderText="文章" DataTextField="Title" 
DataNavigateUrlFormatString="http://dotnet.aspx.cc/article/{0}/read.aspx" /> 
</Columns> 
</asp:GridView> 
</div> 
</form> 
</body> 
</html> 
VB.NET:
<%@ Page Language="VB" Debug="true" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<script runat="server"> 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
Dim TimeString As String = DateTime.Now.Ticks.ToString() 
Dim a As UInt32 = UInt32.Parse(TimeString.Substring(TimeString.Length - 8, 8)) 
Dim b As Int32 = BitConverter.ToInt32(BitConverter.GetBytes(a), 0) 
Dim rnd As Random = New Random(b) 
Dim intRandomNumber As Integer = rnd.Next 
Response.Write(intRandomNumber) 
Dim ConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= DataDirectory aspxWeb.mdb;Persist Security Info=True" 
Dim sql As String = "select top 10 Title,objectGuid from Document Order By Rnd(" + (-1 * intRandomNumber).ToString() + "*id)" 
Dim cn As System.Data.OleDb.OleDbConnection = New System.Data.OleDb.OleDbConnection 
(ConnectionString) 
cn.Open() 
Dim cmd As System.Data.OleDb.OleDbCommand = New System.Data.OleDb.OleDbCommand(sql, cn) 
Dim dr As System.Data.OleDb.OleDbDataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection) 
GridView1.DataSource = dr 
GridView1.DataBind() 
dr.Close() 
cmd.Dispose() 
cn.Dispose() 
cn = Nothing 
End Sub 
</script>
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
<title>随机读取Access数据库记录</title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"> 
<Columns> 
<asp:HyperLinkField DataNavigateUrlFields="objectGuid" HeaderText="文章" DataTextField="Title" 
DataNavigateUrlFormatString="http://dotnet.aspx.cc/article/{0}/read.aspx" /> 
</Columns> 
</asp:GridView> 
</div>