asp.net - 如何分配一个 ID,但如果不使用则将其删除

标签 asp.net sql vb.net

我不确定如何明智地执行此“最佳实践”。

我有一个连接到 MS SQL Server 2012 的 Web 应用程序 (asp.net VB)。当前,当页面加载时,应用程序会连接到数据库表并获取最后一个 ID 并为其添加 1 并将其显示到用户。当用户提交表单时,新 ID 将保存到数据库中。

问题是该应用程序可能由 2 个用户同时打开,因此他们将被分配相同的引用号,这将在保存数据时导致问题。

如果同时打开应用程序,如何为不同用户分配不同的号码而不保存不必要的数据?

最佳答案

对此您有多种解决方案,我将尝试概述一些方法。 (我假设您需要将一些内容插入到我称之为“订单”的数据库中。)

首先,您可以将 ID 生成移至实际插入订单的时刻,而不是用户开始输入数据的时刻。这样,您就不会为从未完成表单的用户生成 ID。此外,使用 sql server 中的自动增量值可以轻松完成此场景。例如,您可以这样做:

-- create a table with an identity column
create table Orders (
    ID int identity(1,1) not null, 
    Description nvarchar(max) not null
);

-- insert values, without specifying the ID column
insert into Orders (Description) values ()

-- select the row back
-- returns 1, 'My First Order'
select * from Orders;

另一种方法是使用 SQL Server Sequences 。这些东西除了连续生成数字之外什么也不做。它们保证数字不会重复,并始终保持当前值的计数,即

-- create a sequence
create sequence OrderIdSequence 
start with 1
increment by 1;

-- get the next sequence value
select next value for OrderIdSequence

关于asp.net - 如何分配一个 ID,但如果不使用则将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18506414/

相关文章:

C# asp.net- 如何从母版页访问内容页的方法?

c# - 如何向 ASP.NET Core 添加自定义角色

c# - 如何将巨大的 .csv 导入 sql 数据库?

vb.net - 在 vb.net 中的表单上显示图标

c# - 为什么不建议在同一个解决方案中混合使用 VB.Net 和 C#?

asp.net - 自动登录Google网络爬虫

c# - 如何在 asp.net 中的按钮单击事件调用之前和之后调用 javascript 函数

mysql - 有效地选择标记为 "latest version"的数据库行,同时匹配给定的间隔

mysql - 在其他选择语句中选择最大值并显示嵌套选择中的相关字段

vb.net - MenuStrip 项目启用/禁用 vb.net