C# 循环在C.net中不起作用
我的小项目是在C.net中,我的项目是一个windowsform测验应用程序。我的应用程序中有两个用户“admin”和一个“user”。管理员可以删除和添加问题 我的问题是当管理员从中间删除一个问题时,我想重新排列问题编号。因为问题是根据问题编号随机选择的。我正在使用while循环。循环正在执行,但更新命令不起作用。任何人都可以建议另一个循环或另一种方法来随机选择问题 以下是我在“删除”按钮中的代码:C# 循环在C.net中不起作用,c#,C#,我的小项目是在C.net中,我的项目是一个windowsform测验应用程序。我的应用程序中有两个用户“admin”和一个“user”。管理员可以删除和添加问题 我的问题是当管理员从中间删除一个问题时,我想重新排列问题编号。因为问题是根据问题编号随机选择的。我正在使用while循环。循环正在执行,但更新命令不起作用。任何人都可以建议另一个循环或另一种方法来随机选择问题 以下是我在“删除”按钮中的代码: private void button_DELQUE_DELETE_Click(object
private void button_DELQUE_DELETE_Click(object sender, EventArgs e)
{
//deleting questions and options
CMD = new SqlCommand("DELETE FROM QUESTIONS WHERE NO='" +int.Parse( textBox_DELQUE_NO.Text).ToString() + "'", CNN);
CMD.ExecuteNonQuery();
CMD = new SqlCommand("DELETE FROM OPTIONS WHERE NO='" + int.Parse(textBox_DELQUE_NO.Text).ToString() + "'", CNN);
CMD.ExecuteNonQuery();
int TOT = 0;
CMD = new SqlCommand("SELECT COUNT(*) FROM QUESTIONS", CNN);
TOT = int.Parse(CMD.ExecuteScalar().ToString());//total no.of questions after deletion
int I = 0;
int DEL = 0;
int TEMP = 0;
DEL = int.Parse(textBox_DELQUE_NO.Text.ToString());//deleted question
TEMP = DEL;
while (TEMP == TOT)
{
I = TEMP;
I = I + 1;
CMD = new SqlCommand("UPDATE QUESTIONS SET NO='" + I + "' WHERE NO='" + TEMP + "'", CNN);
CMD.ExecuteNonQuery();
CMD = new SqlCommand("UPDATE OPTIONS SET NO='" + I + "' WHERE NO='" + TEMP + "'", CNN);
CMD.ExecuteNonQuery();
TEMP = TEMP + 1;
}
为什么不在删除id后更新所有内容?这样,您不需要一段时间,性能将提高300%
update questions set no = no - 1 where no > @yourRemovedID
我想你这里有几个问题。首先,你有: 而TEMP==TOT { ... 温度=温度+1; } 这最多只能执行一次。这似乎是一个糟糕的循环。第二,你是:
CMD = new SqlCommand("UPDATE QUESTIONS SET NO='" + I + "' WHERE NO='" + TEMP + "'", CNN);
TEMP = TEMP + 1;
如果您的循环像for/foreach一样多次执行,那么您将不断更新相同的记录。你刚刚把数字I增加到+1,这就是现在的温度。因此,您的新记录将位于where子句中
我会考虑重新思考这个逻辑。如果您只希望它执行一次,请将它从一段时间更改为一个If,这样对任何查看它的人来说都更有意义。看起来你并不是在重新排列数字。您只是在移动数字以补偿被删除的数字。这就是你的意思,还是你想说你想要所有的东西都以一种新的随机顺序排列?如果是第一条记录,那么@Patrick的答案就是正确的选择。删除其中一条记录时是否要更新所有记录?我能建议改变这个吗?实际上你们不需要它,问题应该是你们会用它做什么…我花了一些时间才意识到这是C代码。请遵循。不幸的是,除了手头的问题之外,代码还有相当多的错误。看着它,我的头很痛,因为自从几年前我们解雇那个小家伙之前,我还没有见过这么多违反最佳实践的行为-@阿德里亚诺雷佩蒂:是的。或者有其他选择问题的方法吗randomly@Kannan当然有,你可以按…随机生成的数字来排序。在你的例子中,我假设你没有一个巨大的表格,你不需要好的随机数,然后简单地从newid排序的问题中选择*就可以了。添加TOP n以只提取n行。我的意思是,如果有5个问题,则问题编号为1,2,3,4,5。如果我删除第三个问题,那么数字应该是1=1,2=2,4=3,5=4。那么,前面的问题,你只是将数字向下移动,以补偿删除的数字。用@Patrick的答案来回答SQL,但是你仍然需要修改你的逻辑。这些可能都放在一个存储过程中,而不是混合在代码和硬编码SQL之间。