0

データベース テーブルのいくつかの値の交換について質問があります。

私が構築しようとしているのは、(ASP.net で) 調査を表示する Web サイトです。SURVEY_QUESTIONS質問は、 (SQL Server 内の)という名前のテーブルに格納されます。

テーブルには次の列があります。

  • 調査質問 ID (整数)
  • 質問 (文字列)
  • タイプ (文字列)
  • アクティブ (ブール値)
  • 順序 (整数)

これで、質問が質問列に保存されます。次に例を示します。

現状に満足していますか?

タイプは、複数選択またはオープン列のいずれかになります。アクティブとは、アクティブな場合にのみ質問が調査に表示されることを意味します。私が抱えている問題は、最後の列であるorder. 質問を最低から最高の順に並べたいです。質問が 5 つある場合は、順序列 1、2、3、4、5 に従って適切に並べられます。

質問を追加して編集する C# (Winforms) アプリケーションがあります。これを datagridview で行い、データセットを使用してグリッド ビューを埋めました。たとえば、保存ボタンを押すと、datagridview の変更がデータベースに更新されます。

ここで、問題 1 の順序番号が 3 で、問題 5 の順序番号が 1 だとします。問題 1 を最初に表示したいので、順序番号は 1 にする必要があります。しかし、この場合、問題 5 にはすでにその順序番号があり、私が望むのは、「占有された」注文番号が別の質問に割り当てられるたびに、それらの注文番号が入れ替わることです。

データベースに更新するための保存ボタンの背後にある次のコードがあります。

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 が既に使用されているかどうかを簡単にテストし、使用されていない場合は update ステートメントを実行できます。

それが使用されていて、注文列で値の重複が許可されていない場合は、OrderID を取得する行に一時的な値 (おそらく -1) を一時的に割り当て、変更する行の現在の OrderID を保存する必要があります。変数で、変更する OrderID の行を正しい OrderID で更新してから、一時的に保存した OrderID を使用して、変更したばかりの OrderID の行を -1 に更新します。

于 2013-10-09T11:10:15.147 に答える