实现软件:数据库SQL2005+visual studio2008.
在网上搜索了一大堆关于与数据库相连实现上移一条记录,下移一条记录的网上都觉得不是很好。由于主键ID可能不连续(虽然插入新闻时是自增的ID号,但实现在进行删除操作后ID号可能不连续),因而涉及到边界问题,容易出现异常。
好了以下是代码(由于是菜鸟学习Programming,代码质量、结构方面可能存在太多瑕疵,希望大家体谅或不吝惜赐教。。)
是由两个按钮组成:
上一条:
protected void Button1_Click(object sender, EventArgs e)
{
int pre=0, curr = 0;//设置了两个临时参数
//--------------------------获取第一条记录的ID值begin---------------------------
int firstID = 0;
SqlConnection conn1 = new SqlConnection("Server=.;Initial Catalog=zbc; Integrated Security=true;");
conn1.Open();
SqlCommand cmd1 = new SqlCommand();
cmd1.Connection = conn1;
cmd1.CommandText = "SELECT TOP 1 ID FROM News ORDER BY ID ASC";//按升序排序后取第一条
SqlDataReader sdr1 = cmd1.ExecuteReader();
if (!sdr1.HasRows)
{
Response.Write("<script>aleter('数据库中没有新闻')</script>");
}
else
{
sdr1.Read();
firstID = sdr1.GetInt32(0);
}
sdr1.Close();
conn1.Close();
//--------------------------获取第一条记录的ID值end------------------------------------
int position = int.Parse(Request.QueryString["ID"].ToString());//获取当前新闻页面的ID值。
SqlConnection conn = new SqlConnection("Server=.;Initial Catalog=zbc; Integrated Security=true;");
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select id from News";
SqlDataReader sdr = cmd.ExecuteReader();
if (!sdr.HasRows)
{
Response.Write("<script>aleter('该新闻不存在')</script>");
}
else
{
sdr.Read();
while (sdr != null)
{
if (position == firstID) { //先判断当前新闻ID是否为第一条,是的话结束循环。
pre = firstID;
break;
}
curr = sdr.GetInt32(0); //不是的话一直读取,知道找到position的上一条记录。
if (curr == position)
{
break;
}else{ pre = curr; }
sdr.Read();
}
Response.Redirect("newsPage1.aspx?id=" + pre + ""); //转跳。
}
}
下一条(原理同上。):
protected void Button2_Click(object sender, EventArgs e)
{
int curr = 1, next = 7;
//--------------------------获取最后条记录的ID值begin------------------------------------
int lastID = 0;
SqlConnection conn1 = new SqlConnection("Server=.;Initial Catalog=zbc; Integrated Security=true;");
conn1.Open();
SqlCommand cmd1 = new SqlCommand();
cmd1.Connection = conn1;
cmd1.CommandText = "SELECT TOP 1 ID FROM News ORDER BY ID DESC";
SqlDataReader sdr1 = cmd1.ExecuteReader();
if (!sdr1.HasRows)
{
Response.Write("<script>aleter('数据库中没有新闻')</script>");
}
else
{
sdr1.Read();
lastID=sdr1.GetInt32(0);
}
sdr1.Close();
conn1.Close();
//--------------------------获取最后一条记录的ID值end------------------------------------
int position = int.Parse(Request.QueryString["ID"].ToString());
SqlConnection conn = new SqlConnection("Server=.;Initial Catalog=zbc; Integrated Security=true;");
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "select id from News";
SqlDataReader sdr = cmd.ExecuteReader();
if (!sdr.HasRows)
{
Response.Write("<script>aleter('该新闻不存在')</script>");
}
else
{
sdr.Read();
while (sdr != null)
{
curr = sdr.GetInt32(0);
if (curr == position )
{
sdr.Read();
if (sdr != null&& position != lastID)
{
next = sdr.GetInt32(0);
break;
}else { next = curr; break; }
}
sdr.Read();
}
Response.Redirect("newsPage1.aspx?id=" + next + "");
}
}
ps:qyb。。哥对你有一股无与伦比的怨气。wtf...好了。。至此结束。