Lire une valeur à partir de la dernière ligne d'une base de données SQL Server CE
J'ai une base de données avec quelques colonnes et l'un des qui est appelé ID
(datatype = int
).
J'ai besoin de connaître la valeur de la ID
de la dernière ligne (pour la dernière ligne, je veux dire le dernier créé).
J'ai essayé ceci, mais il donne une erreur à l'exécution:
string query = "SELECT * FROM Customer WHERE ID = (SELECT MAX(ID) FROM Customer)";
SqlCeCommand comSelect = new SqlCeCommand(query, connection);
SqlCeDataReader rdr = comSelect.ExecuteReader();
int ID = rdr.GetInt32(6);
(GetInt32(6)
parce que ID
est la 6e colonne)
Merci à tous, et désolé pour mon anglais.
P. S.
Client est ma table et ID sont mis dans l'ordre croissant. La première ligne créée a ID = 0
la deuxième ID = 1
etc.
J'ai besoin de savoir le dernier id parce que quand je créer un nouveau client, je veux régler son ID
précédente client ID+1
Erreurs:
Exception de type 'System.Les données.SqlServerCe.SqlCeException " dans System.Data.SqlServerCe.dll non gérée dans le code de l'utilisateur
- Et qui d'erreur à l'exécution obtenez-vous?
- Une Exception de type 'System.InvalidOperationException " dans System.Data.SqlServerCe.dll
- Quel est le message de l'exception?
- le message de l'exception et de la stacktrace
- Pourquoi ne pas simplement utiliser incrément automatique?
- Si vous avez juste besoin de la dernière id, pourquoi ne pas simplement d'exécuter le query = "SELECT MAX(ID) from Client" ?
- J'espère que vous avez besoin de se référer
GetInt32(5)
si c'est le 6e colonne depuis la colonne commence par0
en fonction de l'indice de - Votre stratégie serait thread dangereux, l'auto incrément est le chemin à parcourir.
- GetInt32(6) est à droite c'est le 7 colonnes, désolé 😛
- Comment puis-je exécuter la requête et obtenir l'int ?
Vous devez vous connecter pour publier un commentaire.
Compte tenu du fait que, probablement, il n'y a pas de problème avec la concurrence d'accès, il vous suffit d'obtenir le dernier ID avec un ExecuteScalar appel
ExecuteScalar retourne la première colonne de la première ligne du jeu de résultats.
La requête
SELECT MAX(ID)
retourne juste une ligne avec une seule colonne. Donc ExecuteScalar s'inscrit parfaitement dans ce scénario. Pas besoin d'utiliser une ExecuteReaderCependant, la bonne façon de gérer votre auto-incrémentation scénario est d'utiliser une colonne d'IDENTITÉ qui sera automatiquement réglée à la valeur suivante pour vous lorsque vous insérez un nouveau record.
Dans ce cas, vous avez marqué la colonne ID avec l'IDENTITÉ de propriété sur TRUE, puis vous insérez vos données dans la table Client sans passer aucune valeur pour la colonne ID. Après l'insertion de récupérer immédiatement la valeur attribuée par la base de données de votre colonne ID
Pseudocode
Si vous êtes à la définition de la
Id
et vous pouvez avoir d'autres utilisateurs de son mieux pour enregistrer les nouvelles données et obtenir le je ferais, ou tout nouvel objet, retourné à partir de la db par le code de l'enregistrement de la ligne. Si vous essayez de garder une trace deuser ids
que les autres utilisateurs peuvent ajouter de nouveaux éléments et de gâcher les choses.Si vous avez pour obtenir les dernières que j'avais de la db, alors vous pouvez utiliser
@inserted
dans votre sql pour obtenir la dernière ligne ajoutée.