Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过C中的代码增加字母数字ID#_C#_Sql Server - Fatal编程技术网

C# 如何通过C中的代码增加字母数字ID#

C# 如何通过C中的代码增加字母数字ID#,c#,sql-server,C#,Sql Server,我在数据库中有一个表,其中包含一个字母数字ID字段,ID字段包含两个字母和三个数字,如“AA001” 我想在代码中自动增加ID。首先,我将递增数字直到999,当数字变为999时,字母顺序将改变。e、 g.从“AA999”到“AB001” 如何在C#中执行此操作?只要有一个标准的数字标识列,并使用公式映射到所需的格式即可 CREATE TABLE T ( ID INT IDENTITY PRIMARY KEY, C AS CHAR(65 + ID / 26000) + CH

我在数据库中有一个表,其中包含一个字母数字ID字段,ID字段包含两个字母和三个数字,如“AA001”

我想在代码中自动增加ID。首先,我将递增数字直到999,当数字变为999时,字母顺序将改变。e、 g.从“AA999”到“AB001”


如何在
C#
中执行此操作?

只要有一个标准的数字
标识列,并使用公式映射到所需的格式即可

CREATE TABLE T
  (
     ID INT IDENTITY PRIMARY KEY,
     C AS CHAR(65 + ID / 26000) + CHAR(65 + ID%26000 / 1000) + RIGHT('000' + CAST(ID % 1000 AS VARCHAR), 3)
  ) 


您可能会对计算列进行索引,以支持对诸如
'AA001'
之类的值进行高效查找,但我个人不会为此费心。我只需要将它们转换为等价的数字,并对ID列进行查找。

如果您想在
C#
中执行此操作,可以使用此方法

private static string GetNextId(string seed)
{
    var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    string nextId = string.Empty;

    if (seed == "ZZ999")
        throw new ArgumentOutOfRangeException("I can handle till ZZ999 only!");

    var intPart = int.Parse(seed.Substring(2, 3));
    if (intPart < 999)
        nextId = seed.Substring(0, 2) + (++intPart).ToString("000");
    else
    {
        var char2idx = letters.IndexOf(seed.Substring(1, 1));
        if (char2idx < letters.Length - 1)
            nextId = seed.Substring(0, 1) + letters.Substring(++char2idx, 1) + "001";
        else
        {
            var char1idx = letters.IndexOf(seed.Substring(0, 1));
            nextId = letters.Substring(++char1idx, 1) + "A001";
        }
    }
    return nextId;
}
私有静态字符串GetNextId(字符串种子)
{
var letters=“abcdefghijklmnopqrstuvxyz”;
string nextId=string.Empty;
如果(种子==“ZZ999”)
抛出新ArgumentOutOfRangeException(“我只能处理到ZZ999!”);
var intPart=int.Parse(seed.Substring(2,3));
如果(intPart<999)
nextId=seed.Substring(0,2)+(++intPart.ToString(“000”);
其他的
{
var char2idx=letters.IndexOf(seed.Substring(1,1));
if(char2idx<字母长度-1)
nextId=seed.Substring(0,1)+字母.Substring(++char2idx,1)+“001”;
其他的
{
var char1idx=letters.IndexOf(seed.Substring(0,1));
nextId=字母.子字符串(++char1idx,1)+“A001”;
}
}
返回nextId;
}

我认为这不能自动完成。尝试创建一个插入项的过程,该过程将执行ID增加逻辑。我想在单击“添加”按钮时增加ID,该按钮将调用存储过程来完成此操作。@Pellared如果您选中一个复选框,它将为您自动执行此操作,我想我会将其称为自动。您也可以从应用程序的POV自动调用存储过程……您真的打算跳过AB000吗?非常感谢@Martin Smith。。这是解决我的问题你的答案很好,我会用它。。“我真的非常感谢你。”哈利达尔莫拉很高兴这个答案有帮助。我只是做了一个小的修正,检查
如果(char2idx
并修正你的代码。是的,我改变了它,当数字等于AZ999时,就会出现错误。但现在的错误是fixed@Khaledalmolaa如果在并发条件下运行此函数,则需要添加一些内容,以防止两个线程使用相同的种子调用此函数。@MartinSmith是的,这是一个非常有效的观点。我没提到。