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.
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
.