我有一个关于在数据库表中交换几个值的问题。
我要建立的是一个显示调查的网站(在ASP.net中)。问题将存储在名为SURVEY_QUESTIONS
的表中(在SQL Server中)。
该表格包含以下列:
现在,问题将存储在问题栏中,例如:
您对目前的情况满意吗?
该类型将是多项选择或开放列。活动表示如果活动,则只有问题才会显示在调查中。我遇到的问题是最后一列order
。我想从最低到最高的顺序排列问题。因此,如果我有5个问题,根据订单栏1,2,3,4,5可以很好地订购。
我有一个C#(Winforms)应用程序,我在其中添加问题并进行编辑。我在datagridview中执行此操作,并使用数据集填充网格视图。例如,当我按下保存按钮时,datagridview中的更改将更新到我的数据库。
现在让我们说问题1的订单号为3,问题5的订单号为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");
}
我希望有人可以帮助我解决这个问题,提前谢谢。
答案 0 :(得分:0)
您需要开始使用存储过程。在您的代码中,您有一个显示“数据库已更新”的消息框。你怎么知道数据库已更新?你甚至没有在try catch块中获得代码。
编写一个存储过程,其中包含要更新的QuestionID的输入参数以及要将其更新到的OrderID。然后,您可以轻松测试所需的OrderID是否已被使用,如果没有,则运行更新语句。
如果它正在使用,并且您的订单列不允许重复值,您可能必须临时分配要使用临时值(可能为-1)的OrderID的行,存储您行的当前OrderID想要更改变量,使用正确的OrderID更新要更改其OrderID的行,然后使用临时存储的OrderID将刚刚更改的OrderID更新为-1。