从数据集中检索列的值时出错

时间:2016-04-11 13:39:56

标签: c# asp.net sql-server

我正在填充DataSet中的两个表。从数据集中的第二个表中检索列时,我收到错误。请帮忙!

  

"位置0没有行。"

这是我的代码。

存储过程

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

我正在分享我的代码图片。

enter image description here

enter image description here

4 个答案:

答案 0 :(得分:0)

可能它不会返回任何行

在访问其中的行之前,您需要检查ds.Table[1]中的行数。

确保ds.Table[1].Rows.Count > 0

答案 1 :(得分:0)

  

位置0处没有行

此问题意味着没有为数据集中第二个表执行 SQL 查询返回的行。例如,如果Quantity表与tblProgrammeJobNo匹配,那么Programme值就不存在。

ADO.NET的一个问题是检查类型和行数等所涉及的工作量。

要解决此问题,您应该检查以确保表存在且行数至少为1,甚至列也存在。

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

作为旁注,我建议使用 ORM ,因为它几乎消除了原始ADO.NET样板代码引入的所有问题。

答案 2 :(得分:0)

首先检查SQL是否返回行,尝试手动执行查询。调试时确保正确发送参数(下拉选择值)

错误告诉您第二个表中没有行。理想情况下,始终检查行数是否大于零

答案 3 :(得分:0)

在开头您应检查您的过程是否将任何行返回到ds.Tables[1],因为此错误对于这种情况非常典型。

请检查您的程序的这一部分:

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

如果你有任何行,请告诉我们。