![](/img/trans.png)
[英]C# SQL: How can I increment an integer value in a database by one on multiple records?
[英]how to increment an integer in sql c#
我正在制作投票系统。 我在向他们投票的每个候选人添加一个计数(每次候选人投票时增加)时遇到问题。
我的投票按钮代码是:
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语句是否正确?
看起来你的Vcount
是NULL
。 正如其他人指出的那样,您应该将该列默认设置为0
否则您可以执行此操作
UPDATE TableVote SET Vcount=ISNULL(Vcount, 0) + 1 WHERE id=@count
将默认值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张投票,则可能会产生不可预测的后果。
更好的方法是让表格“投票”,然后为每次投票插入一行,包括候选人ID,选民ID和投票日期。 也意味着您可以拥有不同选民的历史数据,并且您可以根据需要轻松更改投票。
了解这一点
Null + 1 = Null
因此,添加1时,您的Vcount将始终为null。
Vcount必须不可为空,并且它的默认值muste为0.然后当你将1加0时,它会给你带来好的结果。
您还可以更改SQL语句,以便在VCOUNT-Column为空时使用零:
"UPDATE TableVote SET Vcount=ISNULL(Vcount, 0)+1 WHERE id=@count"
如果您无法将数据库模式更改为非空并且具有默认值,则此功能尤其有用。
Vcount必须具有默认的0值,而Not Null,cause是一个Int Field。
如果我没有错,为什么不使用你的主键,
UPDATE TableVote SET Vcount= max(id) WHERE id=@count
要么
如果某些ID被删除,您不想保留记录或计算删除的投票
UPDATE TableVote SET Vcount= COUNT(id) WHERE id=@count
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.