ExecuteNonQuery ne retourne pas de résultats
C'est mon (rugueux) code (DAL):
int i;
//Some other declarations
SqlCommand myCmdObject = new SqlCommand("some query");
conn.open();
i = myCmdObject.ExecuteNonQuery();
conn.close();
Le problème, c'est que Même si il y a un dossier présent sur mon SELECT
de la requête, la valeur en i
reste -1
.
Quel pourrait être le problème?
OriginalL'auteur ta-run | 2011-03-18
Vous devez vous connecter pour publier un commentaire.
Ce genre de requête réalisez-vous? À l'aide de
ExecuteNonQuery
est prévu pourUPDATE
,INSERT
etDELETE
requêtes. Comme par la documentation:OriginalL'auteur Fredrik Mörk
Chaque fois que vous voulez exécuter une instruction SQL ne retourne pas une valeur ou un ensemble d'enregistrements, le ExecuteNonQuery doit être utilisé.
Donc, si vous voulez exécuter une mise à jour, supprimer ou insérer l'énoncé, vous devez utiliser le ExecuteNonQuery. ExecuteNonQuery retourne le nombre de lignes affectées par l'instruction. Cela a l'air très sympa, mais à chaque fois que vous utilisez SQL Server 2005 IDE ou Visual Studio pour créer une procédure stockée, il ajoute une petite ligne qui ruine tout.
Que la ligne: SET NOCOUNT on; Cette ligne de tours sur le NOCOUNT fonctionnalité de SQL Server, qui "Arrête le message indiquant le nombre de lignes affectées par une instruction Transact-SQL d'être renvoyé dans le cadre de l'obtention de résultats et par conséquent, il rend la procédure stockée toujours à retourner -1 lorsqu'il est appelé à partir de l'application (dans mon cas une application web).
En conclusion, supprimer cette ligne à partir de votre procédure stockée, et vous pouvez maintenant obtenir une valeur indiquant le nombre de lignes affectées par l'instruction.
Bonne programmation!
http://aspsoft.blogs.com/jonas/2006/10/executenonquery.html
OriginalL'auteur Nagarjuna Battina
Vous utilisez
EXECUTENONQUERY()
pourINSERT
,UPDATE
etDELETE
.Mais pour
SELECT
vous devez utiliserEXECUTEREADER()
.........OriginalL'auteur SHRUTI PATEL
Parce que le SET NOCOUNT option est réglée sur on. Supprimer la ligne "SET NOCOUNT on;" dans votre requête ou une procédure stockée.
Voir plus à SqlCommand.ExecuteNonQuery() retourne -1 lorsque vous faites Insert /Update /Delete.
OriginalL'auteur Alex Nguyen
Pourriez-vous poster la requête exacte? Le
ExecuteNonQuery
méthode renvoie la@@ROWCOUNT
Sql Server variable de ce que jamais, il est, après la dernière requête exécutée est ce que leExecuteNonQuery
méthode retourne.OriginalL'auteur John Leidegren
La
ExecuteNonQuery
méthode est utilisée pour les instructions SQL qui sont pas requêtes, commeINSERT
,UPDATE
, ... Vous souhaitez utiliserExecuteScalar
ouExecuteReader
si vous attendez de votre déclaration de retourner des résultats (c'est à dire une requête).OriginalL'auteur madd0
Si ce que vous voulez est d'obtenir un seul nombre entier à partir de la requête, utilisez:
C'est vrai, mais comme je l'ai dit lors de la sélection d'un unique entier qu'il est censé être dans la première colonne de la première ligne 🙂
OriginalL'auteur IordanTanev
Comment Définir Compter Sur
OriginalL'auteur n3xus
À partir de MSDN: SqlCommand.Méthode ExecuteNonQuery
Vous êtes à l'aide de SELECT de la requête, ainsi vous obtenez -1
OriginalL'auteur Andrew Savinykh