我正在制作一个投票系统。我在向他们投票的每个候选人添加一个计数(每次候选人投票时增加)时遇到问题。
我的投票按钮代码是:
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();
}
我的桌子是
Vcount
的结果只是NULL
..
我做错了什么?或者我的Sql语句是否正确?
答案 0 :(得分:4)
您的Vcount
似乎是NULL
。正如其他人指出的那样,您应该将该列默认为0
,或者您可以执行此操作
UPDATE TableVote SET Vcount=ISNULL(Vcount, 0) + 1 WHERE id=@count
答案 1 :(得分:3)
将Vcount
的默认值设置为0.它不应为空列。
这是查询
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
答案 2 :(得分:3)
您不应每次都更新计数行。如果您同时收到2张投票,可能会产生不可预测的后果。
更好的方法是让表格“投票”,然后为每次投票插入一行,包括候选人ID,选民ID和投票日期。也意味着您可以获得不同选民的历史数据,并且如果需要,您可以轻松更改投票。
答案 3 :(得分:2)
了解
Null + 1 = Null
因此,添加1时,您的Vcount将始终为null Vcount必须不可为空,并且它的默认值muste为0.然后当你将1加0时,它会给你带来好的结果。
答案 4 :(得分:1)
您还可以更改SQL语句,以便在VCOUNT-Column为空时使用零:
"UPDATE TableVote SET Vcount=ISNULL(Vcount, 0)+1 WHERE id=@count"
如果您无法将数据库架构更改为非空并且具有默认值,则此功能尤其有用。
答案 5 :(得分:1)
Vcount必须具有默认的0值,而Not Null,cause是一个Int Field。
答案 6 :(得分:1)
如果我没有错,为什么不使用你的主键,
UPDATE TableVote SET Vcount= max(id) WHERE id=@count
OR
如果某些ID被删除,而您不想保留记录或计算已删除的投票,那么
UPDATE TableVote SET Vcount= COUNT(id) WHERE id=@count