Was ist mit der Verwendung von DateTime.Now falsch? als Hauptteil von Unique ID?

7

Ich habe RNGCryptoServiceProvider verwendet, um string-basierte Bestell-IDs zu generieren, aber es gab 4 Fälle, in denen ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@$%^*()_- eine bereits existierende Bestell-ID erzeugen würde.

Und es hat mich zum Nachdenken gebracht ...

Warum können wir nicht einfach etwas wie:

verwenden? %Vor%

und:

%Vor%

Mir wurde gesagt, dass es eine schlechte Idee ist, aber ohne irgendeine Erklärung oder Grund, es ist immer noch in meinem Kopf stecken. ... Der Grund, warum ich das verwenden möchte, ist, dass immer eindeutig sein wird.

    
Arrow 07.08.2012, 15:19
quelle

6 Antworten

19

Computer arbeiten im Nanosekundenbereich. Sie würden garantiert eine doppelte Bestellnummer fast sofort generieren.

Am besten verwenden Sie eine GUID [MSDN-C#] [MSDN-SQL] (aka UNIQUEIDENTIFIER in die SQL-Welt).

    
FishBasketGordo 07.08.2012, 15:21
quelle
7

Es wird nicht immer eindeutig sein.

Wenn derselbe Prozess während der gleichen Millisekunde ausgeführt wird, ist er identisch.

Als @Bill hat angegeben, dass Sie eine GUID verwenden sollten für eine eindeutige Zeichenfolge.

    
Curt 07.08.2012 15:21
quelle
6

Niemals den Now getter mehrmals aufrufen. "Jetzt" kann sich ändern, während Sie die Zeichenfolgen hinzufügen. Sie können DateTime.Now.ToString("yyyyMMddHHmmssfff") oder ähnlich sagen, aber es ist viel besser, hierfür Guid.NewGuid() zu verwenden.

    
Jeppe Stig Nielsen 07.08.2012 15:26
quelle
4

Wenn Sie nur einen global eindeutigen Bezeichner haben möchten und sich nicht um das Format kümmern, warum verwenden Sie nicht einfach eine GUID ?

Ссылка

%Vor%

Es hat sogar einen Typ in T-SQL (den Sie möglicherweise verwenden werden dass Sie ASP.NET verwenden)

    
tomfanning 07.08.2012 15:22
quelle
2

Ich empfehle, dass Ihre Datenbank diese Verantwortung übernimmt, aber wenn Sie dies im Code tun müssen, verwenden Sie GUID. GUID hat eine geringe Wahrscheinlichkeit, dupliziert zu werden.

%Vor%     
Karel Bertin Jr 07.08.2012 15:31
quelle
0

Nicht gegen ein totes Pferd, aber die Verwendung von DateTime.Now ist besorgniserregender als das, was Sie versuchen. Sie können Ihre Methode umschreiben und das gleiche Ziel viel kürzer erreichen:

%Vor%

Ich würde immer noch empfehlen, einen Guid über diesen Ansatz zu verwenden. In 99% der Fälle wird die Ticks -Eigenschaft jedoch bei jedem Aufruf eine andere Nummer geben.

    
sellmeadog 07.08.2012 15:40
quelle