Автоматический буквенно-цифровой уникальный идентификатор с помощью C#

#c# #alphanumeric

#c# #буквенно-цифровой

Вопрос:

Общая длина строки составляет 5 символов. У меня есть сценарий, идентификатор начинается с: A0001 и заканчивается: A9999, от B0001 до B9999

Теперь,

  • Если мой продукт (a) будет иметь A0001, A0002 и т.д….
  • Если мой продукт (b) будет иметь b0001, b0002 и т.д….

Как создать этот формат?

Я пытался:

 int a;
        using (SqlCommand command2 = new SqlCommand("select * from voiceno WHERE ID = '1'", con))
        {
            con.Close();
            con.Open();

            SqlDataReader dr;
            dr = command2.ExecuteReader();
            if (dr.Read())
            {
                string val = dr["voiceno"].ToString();
                if (val == "0")
                {
                    txtinvoiceno.Text = "00001";
                }
                else
                {
                    a = Convert.ToInt32(dr["voiceno"].ToString());         
                    a = a   1;
                    txtinvoiceno.Text = a.ToString("00000");
                }
            }

        }
  

Моя таблица выглядит следующим образом

 CREATE TABLE [dbo].[voiceno](
[ID] [int] IDENTITY(1,1) NOT NULL,
[voiceno] [nvarchar](50) NULL)
  

Комментарии:

1. Итак, у вас есть максимум 26 строк, или вы бы тогда продолжили использовать AA0001, AB0001 и т.д.? похоже, вы могли бы добавить свою строку nr к int A в ascii (65), а затем преобразовать выходные данные в char

2. нет, у меня нет максимального @Icepickle можете ли вы объяснить haw, как это сделать

3. Вы хотите сохранить буквенно-цифровые ключи в своей базе данных как A00001 … или вы просто хотите показать A00001, но на самом деле в базе данных это 00001? Если да, то какова проверка, чтобы показать «A» или «B» с ключом.

4. Но если ваш первый продукт — A, а второй — B, то это означало бы, что он продолжается до Z, что составило бы 26 строк, что происходит после этих 26 строк, может быть интересным

5. Что-то в вашем коде кажется не совсем правильным. Вы читаете таблицу voiceno и получаете значение voiceno , затем добавляете 1 к этому значению и отображаете его. Это способ найти максимальное значение, присутствующее в вашей таблице, и увеличить его, чтобы вставить новую запись?

Ответ №1:

У вас может быть функция, которая получает текущее значение и выдает вам следующее значение:

 public string Next(string cur)
{
    int num = int.Parse(cur.Substring(1));
    char chr = cur[0];
    num  ;
    if (num > 9999)
    {
        num = 0;
        chr  ;
    }
    return chr   num.ToString().PadLeft(4, '0');
}
  

Чтобы он получал последний идентификатор из базы данных:

Вы можете получить текущий самый большой идентификатор из базы данных, например:

 select Max(id) from voiceno
  

Также посмотрите на пользовательские автоматически сгенерированные последовательности с SQL Server

Живая демонстрация

Комментарии:

1. я не понимаю, что вы имеете в виду под (Зиан, Джон)

2. @ahmed_eltot93 это решение не сохраняет ключ в базе данных, но вы сказали, что хотите сохранить их таким образом в базе данных… Пожалуйста, будьте ясны и точны в своем вопросе, вы выражаетесь очень двусмысленно

3. @ZainArshad да, я вижу, что теперь я не пробовал это и спрашиваю hem о том, что я вижу только, я с тобой

4. При использовании этого подхода как вы гарантируете, что два элемента не попытаются записать одно и то же значение обратно? Если поток A возвращает текущее максимальное значение как 456 и перед тем, как записать новое значение (предположительно 457) обратно, поток B также возвращает 456? PS: Если вы проверите связанный вопрос, вы увидите, что вся ответственность перекладывается на базу данных, чтобы предотвратить это.

5. @MartinVenter если я хочу создать новый счет для Zain, он будет похож на Zain0001, если VIVA, это будет похоже на VIVA0002, VIVA0003 и т.д….