2017-03-09 68 views
0

我很新的c#编程,我已经继承了这个脚本,我正在努力。SqlDataReader.NextResult()处理0结果

我正在调用3个结果集的过程。第一个结果集将始终返回1条记录。第二个结果集可能会返回1或0个记录。第三个结果集可能会返回1或0个记录。

SqlCommand cmd = new SqlCommand("MyProc", conn); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add(new SqlParameter("@param1", param1)); 
cmd.Parameters.Add(new SqlParameter("@param2", param2)); 

pageData = cmd.ExecuteReader(); 
while (pageData.Read()){ 
    // Do some stuff here 
} 
Response.Write("HERE"); 
pageData.NextResult();       
while (pageData.Read()){ 
    // Do some stuff here 
} 
Response.Write("HERE2"); 
pageData.NextResult();       
while (pageData.Read()){ 
    Response.Write("HERE3"); 
} 

在我的测试情况下,第一记录集返回1分的结果,第二个0和第三1.在这种情况下,它输出第一“这里”,但跳过第二和第三。

我需要跳过第二组是否有0结果它并转到第三

+0

NextResult重新运行一个布尔值。你的电话回复真实吗?如果第二个这里从来没有显示异常正在抛出,你正在默默地扔掉它。你也需要使用'using'语句来处理你的读者。 –

回答

1

可以使用SqlDataReader.HasRows属性,以确定是否有任何结果。

pageData.NextResult();       
if (pageData.HasRows) 
{ 
while (pageData.Read()){ 
    // Do some stuff here 
} 
+0

感谢您的输入,但我测试了一下,得到了相同的结果:“HERE”出现了,但是“HERE2”和“HERE3”不是 –

+0

您需要修改程序以使'Console.WriteLine(“HERE2/3“)'if(pageData.HasRows)'块内部 –

0

你可能想要做像下面这样:

pageData = cmd.ExecuteReader(); 

while (pageData.HasRows) { 
    while (pageData.Read()){ 
     // Do some stuff here 
    } 

    pageData.NextResult();       
} 

希望有所帮助。