#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 и т.д….