C# 循环在C.net中不起作用

C# 循环在C.net中不起作用,c#,C#,我的小项目是在C.net中,我的项目是一个windowsform测验应用程序。我的应用程序中有两个用户“admin”和一个“user”。管理员可以删除和添加问题 我的问题是当管理员从中间删除一个问题时,我想重新排列问题编号。因为问题是根据问题编号随机选择的。我正在使用while循环。循环正在执行,但更新命令不起作用。任何人都可以建议另一个循环或另一种方法来随机选择问题 以下是我在“删除”按钮中的代码: private void button_DELQUE_DELETE_Click(object

我的小项目是在C.net中,我的项目是一个windowsform测验应用程序。我的应用程序中有两个用户“admin”和一个“user”。管理员可以删除和添加问题

我的问题是当管理员从中间删除一个问题时,我想重新排列问题编号。因为问题是根据问题编号随机选择的。我正在使用while循环。循环正在执行,但更新命令不起作用。任何人都可以建议另一个循环或另一种方法来随机选择问题

以下是我在“删除”按钮中的代码:

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之间。