0

我有一个关于交换我的数据库表中的几个值的问题。

我要建立的是一个显示调查的网站(在 ASP.net 中)。这些问题将存储在一个名为SURVEY_QUESTIONS(在 SQL Server 中)的表中。

该表具有以下列:

  • 调查问题 ID(整数)
  • 问题(字符串)
  • 类型(字符串)
  • 活跃(布尔)
  • 订单(整数)

现在,一个问题将存储在问题列中,例如:

您对目前的状况满意吗?

类型将是多项选择或开放列。活跃意味着如果它是活跃的,那么只有问题才会显示在调查中。我遇到的问题是最后一列,order. 我想将问题从最低到最高排序。因此,如果我有 5 个问题,它们将按照顺序列 1、2、3、4、5 很好地排序。

我有一个 C# (Winforms) 应用程序,我可以在其中添加问题并对其进行编辑。我在 datagridview 中执行此操作,并使用数据集填充网格视图。例如,当我按下保存按钮时,datagridview 中的更改将更新到我的数据库中。

现在假设问题一的订单号为 3,问题五的订单号为 1。我希望问题一是第一个显示的问题,这意味着它的订单号应该是 1。但是在这种情况下,问题五已经有该订单号,我想要的是,每当将“占用”的订单号分配给另一个问题时,它们的订单号就会交换。

我在保存按钮后面有以下代码来更新数据库:

DialogResult dr = MessageBox.Show("Are you sure want to edit a question?", "Message", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);

if (dr == DialogResult.Yes)
{
    this.SURVEY_QUESTIONTableAdapter.Update(_PVB1314_005DataSet.SURVEY_QUESTION);
    datagridviewTest.Refresh();
    MessageBox.Show("Database updated");
}

我希望有人可以帮助我解决这个问题,在此先感谢。

4

1 回答 1

0

您需要开始使用存储过程。在您的代码中,您有一个显示“数据库已更新”的消息框。您如何知道数据库已更新?你甚至没有在 try catch 块中得到代码。

使用要更新的 QuestionID 和要更新到的 OrderID 的输入参数编写存储过程。然后,您可以轻松测试所需的 OrderID 是否已在使用,如果没有,则运行更新语句。

如果它正在使用中,并且您的订单列不允许重复值,则您可能必须临时为要使用其 OrderID 的行分配一个临时值,可能是 -1,存储您要更改的行的当前 OrderID在一个变量中,使用正确的 OrderID 更新您想要更改其 OrderID 的行,然后使用您临时存储的 OrderID 更新您刚刚将其 OrderID 更改为 -1 的行。

于 2013-10-09T11:10:15.147 回答