asp.net InsertCommand pour retourner le dernier ID d'insertion
-
18-09-2019 - |
Question
Je ne parviens pas à récupérer la dernière de mon identifiant Inséré SQL Server 2000 db en utilisant un ensemble de données typé dans asp.NET
J'ai créé un TableAdapter et je coché la case « Actualiser datatable » et « Générer Insertion, mise à jour et supprimer des instructions ». Cette auto-génère le remplissage et les méthodes GetData, et Insert, Update, sélectionnez et supprimer des instructions.
J'ai essayé toutes les solutions possibles dans ce fil
http://forums.asp.net/t/990365.aspx
mais je suis toujours unsuccesfull, il retourne toujours 1 (= nombre de lignes affectées). Je ne veux pas créer une méthode d'insertion séparée comme InsertCommand généré automatiquement convient parfaitement à mes besoins.
Comme suggéré dans le fil ci-dessus, j'ai essayé de mettre à jour la syntaxe InsertCommand SQL pour ajouter SELECT SCOPY_IDENTITY () ou quelque chose de semblable, je l'ai essayé d'ajouter un paramètre de type ReturnValue, mais tout ce que je reçois est le nombre de lignes affectées .
Quelqu'un a une opinion différente à ce sujet? Merci d'avance! Stijn
La solution
J'ai trouvé un moyen d'obtenir l'identifiant supplémentaire après insertion en utilisant mon adaptateur de table.
Mon approche est un peu différente, j'utilise une procédure de magasin pour faire l'insert, donc ma commande d'insertion a toutes les valeurs, mais l'ID, je fait le sp retourner l'ID appelant simplement: SET @ ID = SCOPE_IDENTITY () puis COMMIT TRAN et la dernière ligne sera RETOUR @ID
Alors je cherchai mes paramètres de l'adaptateur de table pour InsertCommand et définir les @RETURNVALUE à la colonne de l'ID supplémentaire de la table, alors quand il est exécuté automatiquement mis à la valeur de retour sur le champ id.
Hope this help
Autres conseils
J'ai décidé de renoncer, je ne peux pas se permettre de perdre plus de temps à ce sujet. J'utilise l'instruction Insérer après que je fais une requête de sélection MAX (id) à hget l'ID d'insertion
Si quelqu'un doit avoir une solution, je serai heureux de le lire ici
Merci Stijn
Vous devez indiquer table adaptateur de votre table pour actualiser la données table après mise à jour / opération d'insertion. Voici comment vous pouvez le faire.
-
Ouvrir les propriétés de TableAdapter -> Par défaut Sélectionnez Requête -> Options Advnaced . et vérifiez l'option Actualiser la table de données . Enregistrer l'adaptateur maintenant. Maintenant, lorsque vous appelez la mise à jour sur la table adaptateur, la table de données seront mis à jour [rafraichir] après l'opération de mise à jour / insert et reflètent les dernières valeurs de la table de base de données. si la clé primaire ou tout coloumn est réglé sur auto-incrément, la table de données aura les dernière valeur après la mise à jour récente.
-
Vous pouvez maintenant appeler la mise à jour comme TableAdapterObj.Update (ds.dataTable);
-
Lire les dernières valeurs des coloumns DataTable (ds.dataTable) et attribuer des valeurs respectives dans la table des enfants avant mise à jour / insertion . Cela fonctionne exactement comme vous le voulez.