Feedback

C# - Sequential GUID

Veröffentlicht von am 23.10.2008
(3 Bewertungen)
GUIDs werden in Datenbank oft als ID verwendet. Wird die ID-Spalte indiziert erfolgt beim Einfügen von neuen Werten eine Neustrukturierung der Daten.

Deshalb gibt es im SQL Server 2005 (und neuer) die Methode NEWSEQUENTIALID.

Wird zB LINQtoSQL verwendet und die IDs auf Clientseite generiert wäre es nützlich auch NEWSEQUENTIALIDs zu erzeugen.
Nachfolgend beschrieben Klasse erstellt eine GUID die größer ist als ein je auf dieser Maschine erstellte GUID.
GFU-Schulungen  [Anzeige]

Visual Studio Team Foundation Server 2017/2015 (TFS) für Entwickler - Kompakt

Nach Teilnahme an dieser Schulung kennen Sie alle wesentlichen Funktionen des TFS für Entwickler. Sie setzen Software-Entwicklung mit dem Visual Studio Team Foundation Server erfolgreich um.

ASP.NET 2.0 und 3.5

Dieser Kurs vermittelt Ihnen alle Erweiterungen von Microsoft ASP.NET 2.0. Zu diesen zählen u. a. Data Bindung, Master Pages, und Security.

using System;

namespace gfoidl.Tools
{
	public class Guid
	{
		#region API
		[System.Runtime.InteropServices.StructLayoutAttribute(
			System.Runtime.InteropServices.LayoutKind.Sequential)]
		private struct GUIDDATA
		{
			public int Data1;
			public short Data2;
			public short Data3;

			[System.Runtime.InteropServices.MarshalAsAttribute(
				System.Runtime.InteropServices.UnmanagedType.ByValArray,
				SizeConst = 8)]
			public byte[] Data4;
		}

		[System.Runtime.InteropServices.DllImportAttribute("rpcrt4.dll")]
		private static extern int UuidCreateSequential(out GUIDDATA Uuid);
		#endregion
		//---------------------------------------------------------------------
		/// <summary>
		/// Erstellt eine GUID
		/// </summary>
		/// <returns>
		/// GUID
		/// </returns>
		public static System.Guid NewID()
		{
			return System.Guid.NewGuid();
		}
		//---------------------------------------------------------------------
		/// <summary>
		/// Erstellt eine GUID die größer ist als ein je auf dieser
		/// Maschine erstellte GUID
		/// </summary>
		/// <returns>
		/// GUID
		/// </returns>
		public static System.Guid NewSequentialID()
		{
			GUIDDATA guiddata;

			if ((UuidCreateSequential(out guiddata) & 0x80000000) != 0) // FAILED(hr)  
				throw new InvalidOperationException();

			return new System.Guid(
				guiddata.Data1,
				guiddata.Data2,
				guiddata.Data3,
				guiddata.Data4);
		}
	}
}
Abgelegt unter GUID, LINQ, ID.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!