2009-02-15 9 views
0

J'ai un problème avec la suppression gridview.J'ai un nom de table Doctor avec Id, Nom, Adresse, Phone.Id est champ généré automatiquement.Après l'ajout de données lorsque je suis affichage dans gridview puis supprimer Tout ID de gridview Encore une fois puis si j'ajoute de nouveaux détails de la forme son à partir du nouveau nombre.Je veux dire si je supprime le dernier numéro d'identification 5 puis à nouveau si ajouter un nouveau médecin sa prise d'identification valeur 6 pas de 5. Ma question est devrait recommencer à partir de 5.Voici mon code.Pls m'aider.problème avec asp.net gridview

public class Doctor 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string Phone { get; set; } 
} 

public static class DoctorDataLayer 
{ 
    public static void AddDoctor(Doctor doctor) 
    { 
    string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; // JohannesH: Changed from .ToString() to .ConnectionString 
    using(var connection = new SqlConnection(connectionString)) 
    { 
     using (var command = new SqlCommand("insert into doctor values(@name,@address,@phone)", connection)) 
     {  
     command.Parameters.AddWithValue("@name", doctor.Name); 
     command.Parameters.AddWithValue("@address", doctor.Address); 
     command.Parameters.AddWithValue("@phone", doctor.Phone); 
     connection.Open(); 
     command.ExecuteNonQuery(); 
     connection.Close(); 
     } 
    } 
    } 
} 
public static class DoctorBusinessLayer 
{ 
    public static void CreateDoctor(string name, string address, string phone) 
    { 
    DoctorDataLayer.AddDoctor(new Doctor {Name = name, Address = address, Phone = phone}); 
    } 
} 

Répondre

1

Ainsi, le Id est créé par la base de données (autonumber). Lorsque l'identifiant 5 est utilisé, il est épuisé. C'est un comportement normal.

4

Ceci est un comportement de base de données parfaitement normal et n'a rien à voir avec votre GridView. Si vous rencontrez un problème avec des espaces dans les colonnes autogénérées (identité), utilisez votre propre logique pour générer des ID uniques ou utilisez des scripts SQL personnalisés pour vérifier les lacunes dans les valeurs d'identité et combler ces lacunes.

L'exemple B du Transact-SQL reference montre un moyen de le faire.

1

Comme d'autres l'ont noté, s'il s'agit d'un ID généré automatiquement à partir du DB, une fois qu'il est utilisé, il ne sera pas régénéré, chaque ID est unique, que les données existent ou non. Si les ID étaient recyclés, vous pourriez rencontrer des problèmes avec des références étrangères qui pourraient pointer vers l'ancien élément avec cet ID et pointer vers un nouvel enregistrement différent avec l'ID réutilisé.

Généralement, vous n'exposez pas les ID à l'utilisateur de toute façon, ce n'est donc pas un problème.

1

Vous ne devez pas dépendre de séquences d'identifiants générées automatiquement, ou ne pas avoir de trous. Comme d'autres l'ont noté, le comportement que vous voyez est un comportement parfaitement normal pour un identifiant généré automatiquement et pour le faire autrement, vous devrez passer par un grand nombre de cerceaux. Si vous avez besoin que les identifiants soient ordonnés par la séquence d'insertion, vous devez placer un champ de date/heure autogénéré, puis sélectionner les données ordonnées par ce champ (et l'indexer). Ainsi, si vous décidez de passer d'un ID numérique à un GUID ou à un autre format d'ID dans lequel l'ordre de tri est différent de l'ordre d'insertion, vos données seront toujours triées correctement. Si vous avez besoin d'une "commande de place" pour chacun d'entre eux, générez-la automatiquement (par exemple, un numéro de réservation) comme vous le faites en fonction de la date. De cette façon, vous aurez toujours un ordre numérique strict même si les enregistrements sont supprimés plus tard.