2009-12-04 4 views
1
BGREX.BGREXDataTable _bRexDataTable = new BGREX.BGREXDataTable(); 
BGREX.BGREXRow bgRexRow = _bRexDataTable.NewBGREXRow(); 

bgRexRow.BGRes_TITLE = "abc"; 
bgRexRow.BGRes_VERSION = 123; 

_bRexDataTable.AddBGREXRow(bgRexRow); 
int rewEffected = Adapter.Update(_bRexDataTable); 

Vous avez utilisé ci-dessus pour insérer un enregistrement dans la base de données, fonctionne parfaitement. Maintenant, je dois l'identifiant (clé primaire) de l'enregistrement nouvellement inséré qui est généré automatiquement, au lieu de lignes affectées à retourner deObtenir l'ID de l'enregistrement nouvellement inséré, à l'aide de SqlDataAdapter

Adapter.Update(_bRexDataTable); 

On dirait que je besoin de fonctionner SCOPE_IDENTITY(), mais je ne suis pas sûr où incluez ceci dans le concepteur car les concepteurs ne sont pas satisfaits de la syntaxe suivante ajoutée à la requête d'insertion réelle. Il bien dans la console woks Management SQLServer si

DECLARE @ROWI_D int 

INSERT INTO TABLE 
..... 
..... 
.....   
VALUES 
("val1","val2",.......................) 

SET ROW_ID = SCOPE_IDENTITY() 
+0

La commande d'insertion d'adaptateur utilise-t-elle directement une procédure stockée ou une instruction SQL? – user10635

+0

Instruction SQL directement, pas enregistré procédure –

Répondre

2

Je ne suis pas sûr d'un moyen de faire cela en utilisant des instructions sql avec les commandes. Je ne dis pas que cela ne peut pas être fait, je ne travaille jamais avec les déclarations, toujours à travers sprocs. Grâce à l'utilisation de procédures stockées, vous pouvez définir un paramètre de sortie que vous pouvez définir égal à SCOPE_IDENTITY() dans le sproc, puis vous assurer que vous transmettez ce paramètre dans la commande en réglant sa direction en sortie.

désolé je n'ai pas une solution pour l'appel sql direct, mais peut-être quelqu'un d'autre avec plus d'expérience de travail de cette façon sonnera dans.

est ici un link à un fil qui porte sur ce même sujet et réponse possible. mais il n'y a aucune vérification si la solution suggérée a fonctionné ou non.

+0

Merci compagnon, proc stocké travaillé, se penchera dans l'appel plus tard –

0

Que diriez-vous @@ Identity?

+0

Ce que j'obtiens est "La construction ou l'instruction SQL Declare n'est pas supportée.", Dans le Concepteur de requêtes –

+0

** SI ** vous voulez utiliser quelque chose comme ça, assurez-vous d'utiliser ** SCOPE_IDENTITY() **! Vous pourriez rencontrer des surprises inattendues et non désirées sinon ...... –

1

La meilleure façon de procéder est de passer à une procédure stockée qui renvoie la valeur que vous souhaitez dans un paramètre. Postez le code pour faire la mise à jour que vous avez maintenant et je (ou quelqu'un d'autre) vous montrera comment le refactoriser pour utiliser une procédure stockée. Ce n'est pas dur.

Questions connexes