Commande SQL pour searchr IDENT_CURRENT

Je dois find le dernier numéro inséré en tant qu'identité dans la colonne "ID_K" table KLIENT. Comment devrais-je améliorer mon code?

Merci beaucoup d'avance.

SqlCommand comm = new SqlCommand("IDENT_CURRENT klient", spojeni); // SqlCommand comm = new SqlCommand("Select MAX (ID_K) FROM klient", spojeni); spojeni.Open(); int max = (int)comm.ExecuteScalar(); spojeni.Close(); foreach (DataGridViewRow row in dtg_ksluzby.Rows) { if (Convert.ToBoolean(row.Cells[3].Value) == true) { SqlCommand prikaz2 = new SqlCommand("INSERT INTO klisluz(text,pocet,akce,subkey) values(@val1,@val2,@val3,@val4) ", spojeni); prikaz2.Parameters.AddWithValue("@val1", row.Cells["text"].Value); prikaz2.Parameters.AddWithValue("@val2", row.Cells["pocet"].Value); prikaz2.Parameters.AddWithValue("@val3", row.Cells["akce"].Value); prikaz2.Parameters.AddWithValue("@val4", max + 1); spojeni.Open(); prikaz2.ExecuteNonQuery(); spojeni.Close(); } } 

La syntaxe correcte pour IDENT_CURRENT est

  SqlCommand comm = new SqlCommand("SELECT IDENT_CURRENT ('klient')", spojeni); 

Gardez à l'esprit que IDENT_CURRENT est défini comme NUMERIC (38,0), donc je pense que le meilleur type de données à utiliser pour get la valeur de return d'ExecuteScalar est un Decimal

  decimal lastValue = (decimal)comm.ExecuteScalar(); 

ou, si vos valeurs ne sont pas trop grandes, vous pouvez utiliser

  int lastValue = Convert.ToInt32(comm.ExecuteScalar()); 

Cependant cette command, comme le MAX (K_ID) souffre du même problème. Si quelqu'un d'une connection différente insère un nouvel logging dans la table 'klient' entre cet appel et l'appel à l'insertion dans la table 'klisluz', vous pourriez get un mauvais numéro pour la dernière valeur d'identité insérée. S'il existe une relation entre 'klient' et 'klisluz', vous devriez l'expliquer car le nom de la table et le nom de la colonne ne sont pas clairs.