2016-12-07 2 views
-3

Ich habe die Lösung unten verwendet, aber wenn ich eine bestimmte Zeile lösche, wird es die Nummer duplizieren.autogenerate Nummer aus der Datenbank in C#

Code:

void AutoGenerateId() 
{ 
    SqlConnection cn = new SqlConnection(ConString); 
    string Query = "select COUNT(*) from StudentDetails"; 
    SqlCommand cd = new SqlCommand(Query, cn); 
    try 
    { 
     cn.Open(); 
     int count = Convert.ToInt16(cd.ExecuteScalar()) + 1; 
     txtStudentId.Text = count.ToString(); 
     txtStudentId.Enabled = false; 
    } 
    catch (Exception ex) 
    { 
     lblErrorMsg.Text = ex.ToString(); 
    } 
    finally 
    { 
     cn.Close(); 
    } 
} 
+1

Ich habe nicht die geringste Ahnung, was Sie fragen ... – Siyual

+0

Ich _think_ Ich bekomme, was Sie fragen, irgendwie. Verwenden Sie SELECT IDENT_CURRENT (StudentDetails + 1) anstatt zu zählen, wenn Sie versuchen, den (potenziellen) nächsten Inkrementwert zu erhalten. Ich sage Potenzial, weil es sich ändern könnte, bevor Sie sich verpflichten. Sie benötigen auch eine Identity-Spalte, andernfalls verwenden Sie MAX (Id), wenn nicht IDENTITY (sollte es sein). –

+2

oder verwenden Sie einfach ID INT IDENTITY (1,1) – Steve

Antwort

3

können Sie einen sequencer verwenden IDs zu erzeugen und die nächste zu erhalten.

Beispiel:

string query = "SELECT NEXT VALUE FOR Student.Sequence;" 

Dies wird eine eindeutige Nummer zurück, auch wenn Sie eine Zeile entfernen.

+0

Es gibt Fehler, dass ungültiger Objektname "Std_Info.Id" – WeeZy