Рейтинг:
12
Moosa Arbeed
Я и сам это понял.
public class SerialNumber
{
private static readonly MyDbContext DbContext = new MyDbContext();
public static string SrNo()
{
var sn = DbContext.PrimaryForms.ToList().Last().FormDescription;
var array = sn.Split('/');
if (int.Parse(array[0]) == DateTime.Today.Year)
{
return array[0] + "/" + (int.Parse(array[1]) + 1);
}
return (int.Parse(array[0]) + 1) + "/1";
}
}
если код не ясен, попросите меня объяснить, спасибо.
Richard Deeming
Этот код имеет довольно много проблем.
То .ToList
вызов гарантирует, что вся таблица загружается в память вашего приложения при каждом вызове, просто чтобы выбрать одну запись.
То .Last
вызов предполагает, что возвращаемый список отсортирован правильно в соответствии с вашими требованиями, даже если вы не указали порядок сортировки.
То .Last
вызов вызовет исключение, если не будет возвращено никаких элементов.
Вы предполагаете, что существует только один пользователь, вводящий данные. Если два пользователя попытаются добавить запись одновременно, они получат дубликаты серийных номеров.
Вы предполагаете, что всегда будет по крайней мере один пункт в каждом году. Если в прошлом году товаров не было, то первый товар этого года будет иметь серийный номер, начинающийся с 2018 года, а не с 2019 года.
Вы также предполагаете, что элементы никогда не нужно добавлять ретроспективно, с серийным номером в предыдущем году. Это может быть проблемой, а может и не быть, в зависимости от ваших требований.
Member 14649324
как вы это делаете в vb.net плз не могли бы вы сказать мне что я новичок в этом деле vb.net
Рейтинг:
0
srko
Эй,
Вы можете связать увеличенное значение с годом, пожалуйста, обратитесь к приведенному ниже фрагменту кода и соответственно измените код.
DECLARE @y int
set @y = DateName(yy,getdate())
select cast(ID as varchar(10)) +'/' + cast(@y as varchar(10)) from myTable
Примечание: ниже кода находится вторичное решение с уровня кодаclass Program
{
static void Main(string[] args)
{
int[] serialNumbers = new int[] { 1, 2, 3, 4, 5 };//take your table id's
foreach (var v in serialNumbers)
{
Console.WriteLine("serial number: " + v + " / " + DateTime.Today.Year.ToString());
}
}
}
Выход:-serial number: 1 / 2019
serial number: 2 / 2019
serial number: 3 / 2019
serial number: 4 / 2019
serial number: 5 / 2019
Moosa Arbeed
Я предпочитаю делать это в коде, я использую C#, я оставляю SQL в качестве второго варианта.
srko
Добавлено новое решение в нижней части, работает абсолютно нормально :)
Надеюсь, что это, безусловно, поможет :)
CHill60
Гораздо лучше использовать ссылку "улучшить решение" и добавить дополнительные заметки к существующему решению. Гораздо менее запутанным для людей - в конце концов, какое решение должно быть правильным?
srko
Оба решения верны, одно решение поможет со стороны БД, а другое-с вашего уровня кода.
CHill60
Тем больше причин обновить исходное решение и объяснить это. Размещение нескольких решений вопроса может быть воспринято как охота за точками репа и может привести к понижению голоса
srko
Я новичок на этом форуме, я использую его, но никогда не отвечал и не писал никаких статей. Просто пытаюсь сделать это в первый раз за этот месяц. Я надеюсь, что люди здесь поддержат меня. спасибо за ваш ценный вклад, это поможет мне в предстоящих мероприятиях.
CHill60
Некоторые из них, некоторые менее благосклонны, но добро пожаловать в QA! Спасибо за обновление решения - теперь оно выглядит более полным
srko
Изменил решение, как уже упоминалось, спасибо.
Рейтинг:
0
MadMyche
Способ, которым я это делаю, - это через Sql Server; и как я это делаю, используя DBCC CHECKIDENT()
, который может быть использован для сброса ИДЕНТИЧНОСТЬ колонка.
Где это отличается от того, что вы хотите сделать, так это то, что год, который у меня есть, добавляется к номеру клиента; например, 20190043, 20190044.. и когда наступит Новый год, я сброшу его на 20200001, 20200002 и т. д
Moosa Arbeed
Я предпочитаю делать это в коде, я использую C#
кроме того, я не хочу вручную сбрасывать его каждый год
MadMyche
Мой автоматический; я использую SQL Agent и запускаю его в 01/01 00:00.... и хранимая процедура для создания учетной записи проверяет правильный "префикс"