我正在开发一个确认系统,在完成该过程后会向用户发送一个号码。我需要的是一个递增计数器,它会发回新号码。这是我到目前为止所做的。
int i = 100;
int Counter = i++;
w.Write(Count);
我希望计数器从100开始,当第一个用户使用系统时,他们在屏幕上打印的计数将是101.第二个用户将是102 ......依此类推。
我可以让它增加,但唯一显示的是101,它不会保存101并将其增加到102.有什么想法吗?
答案 0 :(得分:4)
将计数器保存到Application金库:
// read data
// if no such one is present, set counter to the default value (100, etc)
int count = Application["counter"] as int? ?? 100;
// increment
count++;
// save back
Application["counter"] = count;
// do stuff you want to measure
但是,如果应用程序因超时而死亡,或者相应应用程序池被回收的其他原因,此数据将会丢失。
因此考虑使用数据库。安装本地SQL Express是一项非常简单的任务。
还有另外一件事要考虑:如果工作失败,你想要计算它吗?
try
{
DoWork();
Count(); // count only if success
}
finally
{
Count(); // count it anyway
}
答案 1 :(得分:0)
我会将它存储在asp Application对象或数据库中。每个请求本质上都是无状态的,因此您无法在没有会话或数据库的情况下将变量保留在范围内。
var number = Application["NameOfObject"] as int ?? 100;
number ++;
Application["NameOfObject"] = number;
w.write(number);
答案 2 :(得分:-2)
Web应用程序是无状态的,因此页面重新加载时会丢失所有数据。会话状态将数据保存在内存中:
Session("counter") = i++;
但请注意,会话状态是每个用户(因此每个用户将具有不同的计数)。
要使站点范围内的数据持续存在于不同的会话和长期,唯一真正的解决方案是将命中数存储在数据库中,因为应用程序数据在重新加载应用程序时被清除(如果没有用户或者如果有改为web.config)