Oracle使用sql语句分页显示数据,C#版,两条C#语句,在ORacle数据库中实现分页可以使用rownum,这给分页的使用带来了极大的方便:
string osql = "select username , to_char(userid) from td_user";
string sql = "select a.* from (" + "select rownum my_rownum,my_table.* from " + "(" + osql + ") my_table where rownum<('" + (page * 50).ToString() + "'+1) ) a where my_rownum>('" + (page * 50).ToString() + "'-50)";
其中,常数50:每页的行数,page:当前页码
完整代码如下:
//数据的显示及分页,返回完整的html table流
private string Flow(int page)
{
//从配置文件获取数据库连接串
string dbconnstr = ConfigurationSettings.AppSettings["dbconnstr"];
OracleConnection conn = new OracleConnection(dbconnstr);
OracleCommand cmd = conn.CreateCommand();
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
string osql = "select username , to_char(userid) from td_user";
string sql = "select a.* from (" + "select rownum my_rownum,my_table.* from " + "(" + osql + ") my_table where rownum<('" + (page * 50).ToString() + "'+1) ) a where my_rownum>('" + (page * 50).ToString() + "'-50)";
cmd.CommandText = sql;
OracleDataReader odr = cmd.ExecuteReader();
StringBuilder sbFlow = new StringBuilder();
sbFlow.Append("<table cellpadding=\"1\" cellspacing=\"1\" style=\"border-spacing: 1; border-width: 2px; padding: 1; border-color: White\"> <tr style=\"color: #E7E7FF; background-color: #4A3C8C; border-width: 1px; height:15px; padding-bottom:0px; padding-top:0px;\"><td style=\"width:100px;\">用户名</td><td style=\"width:50px;\">用户ID</td></tr>");
while (odr.Read())
{
//sbFlow.Append("<tr style=\"color: Black; background-color: #DEDFDE; height:15px;\">");
sbFlow.Append("<tr>");
//odr.GetInt32(0)的数据为my_rownum,行的序号
sbFlow.Append("<td>" + odr.GetString(1) + "</td>");
sbFlow.Append("<td>" + odr.GetString(2) + "</td>");
sbFlow.Append("<td><a href=\"task.aspx?tk=info&id=" + odr.GetString(2) + "\">用户信息</a></td>");
sbFlow.Append("</tr>");
}
sbFlow.Append("</table>");
odr.Close();
conn.Close();
cmd.Dispose();
conn.Dispose();
return sbFlow.ToString();
}
//获取url链接
private string Paging(int page)
{
string dbconnstr = ConfigurationSettings.AppSettings["dbconnstr"];
OracleConnection conn = new OracleConnection(dbconnstr);
OracleCommand cmd = conn.CreateCommand();
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
cmd.CommandText = "select count(*) from td_user";
int cnt = Int32.Parse(cmd.ExecuteScalar().ToString());
int pcnt = cnt / 50;
pcnt = pcnt + 1;
if (page > pcnt)
{
page = pcnt;
}
int p = pcnt;
if (page + 10 < pcnt)
{
p = page + 9;
}
string url = "";
for (int i = page; i <= p; i++)
{
url += "<a href=\"task.aspx?tk=info&p=" + i.ToString() + "\">[" + i.ToString() + "]</a> ";
}
string paging;
if (page == 1)
{
paging = "<a href=\"task.aspx?tk=info&p=1\">[首页]</a> <a href=\"task.aspx?tk=info&p=1\">[上一页]</a> " + url + "<a href=\"task.aspx?tk=info&p=" + (page + 1).ToString() + "\">[下一页]</a> <a href=\"task.aspx?tk=info&p=" + pcnt.ToString() + "\">[末页]</a>";
}
else
{
paging = "<a href=\"task.aspx?tk=info&p=1\">[首页]</a> <a href=\"task.aspx?tk=info&p=" + (page - 1).ToString() + "\">[上一页]</a> " + url + "<a href=\"task.aspx?tk=info&p=" + (page + 1).ToString() + "\">[下一页]</a> <a href=\"task.aspx?tk=info&p=" + pcnt.ToString() + "\">[末页]</a>";
}
conn.Close();
cmd.Dispose();
conn.Dispose();
return paging
}