【问题标题】:An Update statement in a loop循环中的更新语句
【发布时间】:2012-12-17 18:05:52
【问题描述】:

我在网格视图中有这张表。

ID     Question_No          Question             Survey_ID
-----------------------------------------------------------

 1         1            Whats you name?             44
 2         2            How Old Are you?            44
 3         3       Whats your favorite hobby        44
 4         4          What did you study?           44 

我想在页面上添加一个删除按钮,如下所示:当我删除其中一条记录时,只要调查 ID 为 44,我想自动更新所有问题的 question_no。例如,如果我删除第二个问题,会变成这样。

    ID     Question_No          Question             Survey_ID
-----------------------------------------------------------

     1         1            Whats you name?             44
     3         2       Whats your favorite hobby        44
     4         3          What did you study?           44 

我该怎么做?我想它一定是一个循环,但我什至不知道如何处理它。

编辑:这是我的删除按钮代码

protected void RemoveQuestionButton_Click(object sender, EventArgs e)
        {
            try
            {
                DataRowView r;
                r = ((DataRowView)QuestionsGridView.GetRow(QuestionsGridView.FocusedRowIndex));
                Session["Question_ID"] = r[0];

                if (Session["Question_ID"] != null)
                {
                    SqlConnection connection = DatabaseConnection.GetSurveySystemConnection();
                    string delStatement1 = "DELETE FROM Questions WHERE ID =" + Session["Question_ID"];
                    string delStatement2 = "DELETE FROM Question_Options where Question_ID=" + Session["Question_ID"];
                    SqlCommand cmd = new SqlCommand(delStatement1, connection);
                    SqlCommand cmd2 = new SqlCommand(delStatement2, connection);
                    cmd.CommandType = CommandType.Text;
                    cmd2.CommandType = CommandType.Text;

                    try
                    {
                        cmd2.ExecuteNonQuery();
                        cmd.ExecuteNonQuery();
                        ConfirmLbl.ForeColor = System.Drawing.ColorTranslator.FromHtml("Green");
                        ConfirmLbl.Text = "Question & Options Deleted Successfully!";
                        QuestionsGridView.DataBind();

                    }
                    catch (Exception)
                    {
                        ConfirmLbl.ForeColor = System.Drawing.ColorTranslator.FromHtml("red");
                        ConfirmLbl.Text = "This Question Has Options Linked to it...";
                    }
                    finally
                    {
                        connection.Close();

                    }
                }
            }
            catch (Exception)
            {
                ConfirmLbl.ForeColor = System.Drawing.ColorTranslator.FromHtml("red");
                ConfirmLbl.Text = "You need to select a Question to edit...";
            }
        }

【问题讨论】:

  • 如果他甚至不知道如何接近它,似乎什么都没有。
  • 您是否有任何尝试自己编写的 C# 代码..?为您提供快速答案并不能真正帮助您学习 C#,请花时间去谷歌搜索,或者先尝试自己编写代码..
  • 您是从数据库还是从其他来源提取这些数据?如果是这样,当您删除一个问题时,您是从源中删除该问题吗?
  • 是的,我从连接到 sqlserver 的 sqldatasource 中提取它,是的,我从源中删除它,我现在正在编辑我的问题,为您提供我所拥有的。

标签: c# asp.net sql sql-server-2012


【解决方案1】:

这可以通过一条更新语句来完成。

delete from question
   where id = 2;

with new_order as (
   select row_number() over (partition by survey_id order by question_no) as new_question_no,
          question_no as old_question_no, 
          id
   from question
) 
update question 
  set question_no = nq.new_question_no
from new_order nq
where nq.id = question.id
  and survey_id = 44;

commit;

这是一个 SQLFiddle 示例:http://sqlfiddle.com/#!6/0a1e7/1

【讨论】:

    【解决方案2】:

    您所需要的只是一个查询 db 表并将结果集设置/绑定到您的 gridview 的函数。然后,当您删除一个问题并将其从数据库中删除时,调用该函数并将您的 gridview 重新绑定到新的结果集。

    您可以在您的 sql 查询中使用partition ROW_NUMBER 来创建一个连续的行号列。您可以查看其中的一些示例来帮助您执行此操作。

    【讨论】:

    • 嗯,本来想在delete语句下加一个select和update语句,delete的时候会检查问题的序号,然后再设置,但问题是怎么能我用值更新一列:1、2、3、4 等,直到列结束?
    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    相关资源
    最近更新 更多