Arriver @@IDENTITÉ de TableAdapter

Je suis en train de terminer une tâche apparemment simple qui s'est transformée en une de plusieurs heures d'aventure: Arriver @@Identity de TableAdapter.Insert().

Voici mon code:

protected void submitBtn_Click(object sender, EventArgs e)
{
    AssetsDataSetTableAdapters.SitesTableAdapter sta = new AssetsDataSetTableAdapters.SitesTableAdapter();
    int insertedID = sta.Insert(siteTxt.Text,descTxt.Text);

    AssetsDataSetTableAdapters.NotesTableAdapter nta = new AssetsDataSetTableAdapters.NotesTableAdapter();
    nta.Insert(notesTxt.Text, insertedID, null,null,null,null,null,null);
    Response.Redirect("~/Default.aspx");
}

Un réponse suggère tout ce que je peut avoir à faire est de changer le ExecuteMode. J'ai essayé aussi. Cela rend GetData() cesser de travailler (parce que je suis de retour d'un scalaire maintenant, au lieu de rowdata) (j'ai besoin de garder GetData()). Elle ne résout pas le problème dans le insertedID variable est toujours à 1.

J'ai essayé de créer un deuxième TableAdapter dans le TypedDataSet.XSD et la définition de la propriété pour que la carte de "scalaire", mais il ne parvient toujours pas avec la variable d'obtenir une valeur de 1.

Générés commande insert est

INSERT INTO [dbo].[Sites] ([Name], [Description]) VALUES (@Name, @Description);
SELECT Id, Name, Description FROM Sites WHERE (Id = SCOPE_IDENTITY())

Et le "Rafraîchir les Données de la Table" (ajoute une instruction select après les instructions Insert et Update pour récupérer l'Identité" est également définie.

Environnement

SQL Server 2008 R2, Visual Studio 2010, .NET 4, Windows XP, tous les locaux même de la machine.

Ce qui cause cela?

MODIFIER/METTRE À JOUR

Je tiens à préciser que je suis l'aide de l'auto-code généré par Visual Studio. Je ne sais pas quel "outil" qui a généré le code est bien, mais si vous double-cliquez sur l' *.Fichier XSD, il affiche une INTERFACE utilisateur de la Table SQL du Schéma et associés TableAdapter. Je veux continuer à utiliser le code généré automatiquement et en quelque sorte à permettre l'obtention de l'Identité. Je ne veux pas écrire tout cela à la main avec des procédures stockées.

Si possible, utilisez SCOPE_IDENTITY() ou IDENT_CURRENT(tablename) au lieu de @@IDENTITY. Le @@IDENTITY valeur pourrait ne pas être ce que vous attendez (c'est le dernier IDENTITÉ généré dans toutes les tables qui ont été impliqués dans la dernière transaction, y compris celles qui pourraient faire l'objet d'un INSERT à partir d'un déclencheur ou quelque chose comme ça).
Juste une remarque sur votre modifier le code généré automatiquement ramasse sur les changements dans votre sprocs - comme dans ma réponse ci-dessous, vous seulement besoin de modifier les 2 lignes de code pour obtenir l'effet désiré. Je ne pense pas qu'il y ait une autre façon.

OriginalL'auteur P.Brian.Mackey | 2010-09-13