2017-03-09 3 views
0

私はC#のプログラミングには新しく、私はこのスクリプトを継承しています。SqlDataReader.NextResult()は0の結果を扱います

私は3つの結果セットを持つプロシージャを呼び出しています。最初の結果セットは常に1レコードを返します。 2番目の結果セットは、1レコードまたは0レコードを返すことがあります。 3番目の結果セットは、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を返した結果、第1 0この場合において第三のセットは、「ここでは」第一の出力が、第二及び第三のをスキップします。

は、私はそれのための0結果がある場合には、第2セットをスキップして、いずれかの結果があるかどうかを判断するためにSqlDataReader.HasRowsプロパティを使用することができます第三

+0

NextResultはboolを再実行します。あなたの呼び出しは真実を返しますか?ここの2番目が表示されない場合、例外がスローされており、あなたはそれを静かに投げ捨てています。また、あなたのリーダーを処分するために 'using'ステートメントを使う必要があります。 –

答えて

1

に行く必要があります。助け

pageData = cmd.ExecuteReader(); 

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

    pageData.NextResult();       
} 

希望:

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

あなたのご意見ありがとうございますが、私はそれをテストし、同じ結果を得ました: "HERE"は表示されますが、 "HERE2"と "HERE3"は表示されません –

+0

プログラムを修正して 'Console.WriteLine/3 ")' if(pageData.HasRows)ブロックの内部 –

0

は、おそらく次のような何かをしたいです。

関連する問題