2017-03-09 62 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();       
} 

希望有所幫助。