3

投票システムを作っています。投票した各候補者にカウント (候補者が投票されるたびにインクリメント) を追加する際に問題があります。

私の投票ボタンのコードは:

    sc.Open();
        try
        {
            cmd = new SqlCommand("UPDATE TableVote SET Vcount=Vcount+1 WHERE id=@count", sc);

            cmd.Parameters.AddWithValue("@count", TxtPresID.Text);

            int res = cmd.ExecuteNonQuery();
            if (res > 0)
            {
                MessageBox.Show(TxtPresID.Text.ToString() + " Saved!");
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            sc.Close();
        }

そして私のテーブルは

私のSQL

の結果VcountはちょうどNULL..

ヌル

私は何を間違っていますか?または私のSQLステートメントは正しいですか?

4

7 に答える 7

4

あなたVcountはのようですNULL。他の人が指摘したように、その列をデフォルトにする0か、これを行うことができます

UPDATE TableVote SET Vcount=ISNULL(Vcount, 0) + 1 WHERE id=@count
于 2013-10-28T16:01:41.133 に答える
3

毎回カウント行を更新するべきではありません。同時に 2 票が入った場合、予期しない結果になる可能性があります。

より良い方法は、「投票」テーブルを作成し、候補者 ID、有権者 ID、投票日を含む各投票の行を挿入することです。また、さまざまな有権者の履歴データを取得でき、必要に応じて簡単に投票を変更できることも意味します。

于 2013-10-28T16:04:10.820 に答える
3

のデフォルト値をVcount0 に設定します。null 列であってはなりません。

ここにクエリがあります

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}

ALTER TABLE TableVote 
ADD Vcount int NOT NULL 
CONSTRAINT  tablevote_vcount_default DEFAULT 0

別のオプションは、Vcount が NULL かどうかを確認することです

UPDATE TableVote SET Vcount=ISNULL(Vcount, 0) + 1 WHERE id=@count
于 2013-10-28T16:01:03.293 に答える
2

それを学ぶ

Null + 1 = Null

そのため、1 を追加すると、Vcount は常に null になります。Vcount は
null 可能であってはならず、デフォルト値は 0 でなければなりません。その後、1 を 0 に追加すると、良い結果が得られます。

于 2013-10-28T15:59:52.170 に答える
1

VCOUNT-Column が null の場合にゼロが使用されるように、SQL ステートメントを変更することもできます。

"UPDATE TableVote SET Vcount=ISNULL(Vcount, 0)+1 WHERE id=@count"

これは、データベース スキーマを Not-Null に変更できず、デフォルト値を持つ場合に特に便利です。

于 2013-10-28T16:02:44.213 に答える
1

Vcount はデフォルト値 0 である必要があり、Null ではありません。原因は Int フィールドです。

于 2013-10-28T16:03:48.613 に答える
1

私が間違っていなければ、主キーを使用しないのはなぜですか、

UPDATE TableVote SET Vcount= max(id)  WHERE id=@count

また

一部のIDが削除され、記録を保持したり、削除された投票を数えたりしたくない場合は、

  UPDATE TableVote SET Vcount= COUNT(id)  WHERE id=@count
于 2013-10-28T16:24:31.967 に答える