Чтобы не начинать с 0 - просто начните с 10000. Забудьте о нулевом заполнении.
Вы должны учитывать, когда будет выделено число.
Если вы присваиваете номер при первом открытии счета для редактирования, например, присваивается номер 10014, и пользователь отменяет счет, тогда у вас есть пробел, так как вы должны помнить, что кто-то еще мог уже иметь начал создавать счет с идентификатором 10015, поэтому вы не можете просто откатить номер.
Если вы назначите номер, когда счет был полностью написан и сохранен, вы избежите сценария и избежите пробелов, но вы не будете знать, какой номер счета будет иметь счет до оно сохранено.
Кроме того, вам необходимо убедиться, что он безопасен для потоков, чтобы два пользователя не могли создать один и тот же номер счета.
static object _invoiceNumberLock = new object();
public static string GetInvoiceNumber()
{
lock(_invoiceNumberLock)
{
//Connect to database and get MAX(invoicenumber)+1
//Increase the invoicenumber in SQL database by one
//Perhaps also add characters
}
}
Также подумайте о резервном копировании уникальности, добавив UNIQUE INDEX в столбец invoicenumber в базе данных SQL.