提问:C#作的一个改变排序的过程,可是每次执行都乱套,请高手指点(附代码)
C# 初学者,问题简单,或者高手指点其他方法下面的代码是实现调换两个相邻记录的排序
ID为表的主键,记录的编号,Order为记录的排序
我想实现,升序时跟上面的记录交换Order,降序时跟下面的记录交换
可是我编写下面代码时,每次执行结果都不一样,
//改变排序序号
private void UpdateUpAndDown(string flag, int Id)
{
SqlConnection con = DB.CreateCon();
if (con.State == ConnectionState.Closed)
{
con.Open();
}
//提取ID号对应的Order号
string sqlOrder = "select WebOrder from TWebSite where WebId=" + Id;
int order = admin_cls.getValue(sqlOrder);
bool find = false;
//判断是升序还是降序,提取排序Order上一条或下一条记录的ID和Order
int tempId=0, tempOrder=0;
string sql = "";
switch (flag)
{
case "UP":
sql = "select top 1 WebId,WebOrder from TWebSite where WebOrder<" + order + " order by WebOrder desc";
break;
case "DOWN":
sql = "select top 1 WebId,WebOrder from TWebSite where WebOrder>" + order + " order by WebOrder";
break;
default:
sql = "";
break;
}
if (sql != "")
{
SqlCommand cmd = new SqlCommand(sql, con);
SqlDataReader sdr=cmd.ExecuteReader();
while (sdr.Read())
{
//得到上一个的编号和序号
tempId = Convert.ToInt32(sdr[0]);
tempOrder = Convert.ToInt32(sdr[1]);
find = true;
}
sdr.Close();
}
Response.Write(Id.ToString() + "-" + order.ToString() + "==" + tempId.ToString() + "-" + tempOrder.ToString()+"<br>");
//交换排序
if (find==true)
{
SqlCommand cmd1 = new SqlCommand("update TWebSite set WebOrder=" + tempOrder + " where WebId=" + Id, con);
cmd1.ExecuteNonQuery();
SqlCommand cmd2 = new SqlCommand("update TWebSite set WebOrder=" + order + " where WebId=" + tempId, con);
cmd2.ExecuteNonQuery();
//如果不执行IF里面的语句,输出的ID、Order、TempId、TempOrder都没问题
//如果执行里面的语言,每次结果都不同,次序大乱
//
find = false;
}
if (con.State != ConnectionState.Closed)
{
con.Close();
}
}
//改变排序 --------------------编程问答-------------------- 恩 这是有问题的
因为 ID,Order,TempId,TempOrder存在相等的情况,这样的情况出现的话,修改时就不能的到预期的结果(事实上,用概率计算一下,只有在极小部分特殊情况下,你才能得到对的结果)
如果想要实现预期功能,需要一张Temp Table来在中间交互
不过这样貌似效率很差,个人建议走其他的路吧 --------------------编程问答-------------------- 至少要保证WebOrder的值是唯一的.
否则一定不能实现你的需求... --------------------编程问答-------------------- 我在Asp代码的时候,就是用的这个算法,可到了C#net就不行了
有啥好的算法吗?提供一个,感谢!万分感谢!
补充:.NET技术 , C#