Erreur lors de la récupération de la valeur d'une colonne à partir d'un set de données

Je remplis deux tables dans DataSet.while en récupérant la colonne de la 2ème table dans l'set de données que je reçois l'erreur. S'il vous plaît aider!

"Il n'y a pas de ligne à la position 0."

Voici mon code.

Procédure stockée

CREATE proc [dbo].[spDispatchDetails] ( @JobNo int, @Programme nvarchar(100) ) as begin select ReceivedFrom,ChallanNo,ChallanDate,JobNo,ReceivingDate,LotNo from tblOrders where JobNo=@JobNo and OrderStatus='In Process' select Quantity from tblProgramme where JobNo=@JobNo and Programme=@Programme end 

Je partage l'image de mon code.

entrez la description de l'image ici

entrez la description de l'image ici

probablement, il ne renvoie pas de lignes

vous devez vérifier le nombre de lignes dans ds.Table[1] avant d'y accéder.

Assurez-vous que ds.Table[1].Rows.Count > 0

Vérifiez d'abord si SQL returnne des lignes, essayez d'exécuter la requête manuellement. Pendant le debugging, assurez-vous que les parameters sont correctement envoyés (les valeurs sélectionnées dans la list déroulante)

L'erreur vous indique qu'il n'y a pas de lignes dans la seconde table. Idéalement, vérifiez toujours que le nombre de lignes est supérieur à zéro

Au début Vous devriez vérifier si votre procédure renvoie des lignes à ds.Tables[1] , car cette erreur est très typique de cette situation.

Veuillez vérifier cette partie de votre procédure:

 select Quantity from tblProgramme where JobNo=@JobNo and Programme=@Programme 

et laissez-nous savoir si vous obtenez des lignes.

Le n'est pas une rangée à la position 0

Ce problème signifie qu'il n'y a aucune ligne qui a été renvoyée à partir de l'exécution de la requête SQL pour la deuxième table dans l'set de données. Par exemple, la valeur Quantity n'existe pas si la table tblProgramme laquelle JobNo et Programme correspondent aux valeurs transmises dans l'appel.

L'un des problèmes avec ADO.NET est la quantité d'efforts impliqués dans la vérification des types et des nombres de lignes, etc.

Pour résoudre le problème, vous devez vérifier que la table existe et que le nombre de lignes est au less égal à 1, et même que la colonne existe également.

 if (ds.Tables.Count == 2 && // Ensure two tables in the dataset ds.Tables[1].Rows.Count > 0 && // Ensure second table has a row ds.Tables[1].Rows[0]["Quantity"] != DBNull.Value) // Ensure value for Qty { // Then do something with it... } 

En guise de remarque, je suggérerais d'utiliser un ORM car il élimine presque tous les problèmes introduits par le code ADO.NET .