c# - 生成连续的字母数字 ID

标签 c# sql-server-2008

你好
我在我的项目中要求生成顺序 ID,即从 A1001, A1002 开始,在 10,000 之后它应该从 B1001, B1002,...B10000 ,C1001.. 等等。我正在使用以下 SQL 从我的数据库表中获取最大 ID

  SELECT TOP 1 [ID_COLUMN] 
  FROM [NAME_OF_TABLE] 
  ORDER BY [ID_COLUMN] DESC

然后必须从我的 ASPX 页面后面的代码生成 3 个新的顺序 ID,然后再次将它们保存到表中。我查看了不同的可能性,但没有得到真正想要的东西。我尝试了下面的链接 > Auto Generate alphanumeric Unique Id with C#还有很多..但无法解决问题。

最佳答案

如果您将当前值作为字符串检索,您将有权访问 Substring 方法来提取数字部分。然后您可以使用 int.Parse 将数字部分转换为一个值,然后再递增并检查其新值。

假设当前最大值存储在“id”中,提取数值和字符前缀:

int value = int.Parse(id.Substring(1)); // 1000, 1001 ...
char prefix = id[0]; // A,B ...

要将前缀从 A 增加到 B 等,您可以使用以下代码:

prefix = (char)(prefix + 1); // A -> B ...

只需确保在增加值之前检查“Z”!

要组装新的 ID,您可以使用:

string newid = prefix + value.ToString("0000");

你需要考虑的事情:

  • 处理从空表返回的空 (null/DBNull.Value) 值(将其替换为 A1001)
  • 当您通过 Z10000 时会发生什么?
  • 读取当前最大值、生成三个新值并将它们写回应该在一个数据库事务中完成(搜索 TransactionScope),否则如果网站流量增加,您将遇到问题,因为多个请求将尝试同时生成新值.

希望对您有所帮助!

关于c# - 生成连续的字母数字 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22071108/

相关文章:

c# - 转换为 .NET 引用源中的对象

c# - 使用预处理器指令 #if 在 Visual Studio 中调试 WindowsService

c# - 用于处理个人和经常性费用的数据库设计

sql-server - 使用 xquery 压缩 xml 节点?

sql - 查询以从按一个字段分组的动态表中获取最后插入的行

sql-server-2008 - 使用 SQL Server 恢复备份

c# - D3DERR_INVALIDCALL 错误,TeamCity 构建器

c# - 为什么 ASP.Net MVC 范围属性采用类型?

sql-server - 将 xml 列值包装到外部以进行 xml 路径查询

sql - 如何在单个 SELECT 语句中拥有多个公用表表达式?