如何在没有数据库的情况下保留AutoIncrement / Identity值?

时间:2009-12-13 04:34:04

标签: asp.net .net-2.0 asp.net-2.0

我已经收到了一个紧急项目(asp.net c#framework v2),当然是在星期一早上到期。这是一个非常简单的项目 - 在现有网站上添加“请求报价”页面。基本上,收集一些信息,然后通过电子邮件向公司的某人发送表格内容,并向用户显示“谢谢”页面。简单就像馅饼......直到我刚读完最后一个要求。

每个表单提交都应该有一个“确认号”,从10000开始,每个表单连续递增一个数字。

听起来很简单吧?好吧,我这个网站没有数据库。不知道为什么,除了我需要填写要求的信息之外,我真的不知道关于网站的任何其他信息。

所以,考虑到这一点,并意识到这不是最优的,我想我唯一的解决方案是制作一个文本文件(yuck)并读入它,获取最后使用的数字,添加一个,然后写回到文本文件。当然,在“锁定”文件方面还有很多不足之处,所以我不会得到重复的数字。

有人对我有什么建议吗?我现在对任何事情持开放态度......

3 个答案:

答案 0 :(得分:2)

首先,我假设每个进程都有某种可用的唯一标识符。这可以是进程ID,也可以保证在没有竞争条件的情况下是唯一的。将此值写入具有相同名称的文件,以便您没有创建该文件的竞赛。然后,如果它不存在,将其移动到名为“lock”的文件。通过查看内容检查这是否成功。现在从确认号文件中读取值。检查“lock”文件中是否包含您的唯一标识符 - 这可确保两个人都没有试图将其文件移动到锁定状态。如果是您的,请将增加的编号和您的唯一ID写回确认编号文件。再次检查您是否按住了锁,并且确认号文件中包含您的ID。然后删除锁定文件。 如果失败,只需等待锁定文件消失,然后再试一次。

这应该允许您以无种族的方式写入文件,并确保序列号始终增加一。

答案 1 :(得分:0)

您可以在Windows注册表中跟踪确认号,但是根据您的建议,可能更容易使用简单的文本文件。确保每次清理(即Dispose)文件句柄以释放任何文件锁。

答案 2 :(得分:-1)

我认为XML是一个很好的解决方案。

This帖子可能会让xml变得更加容易。