0

DBテーブルを照会して情報を取得するSQLコマンドがあります....非常に基本的です。

デバッグ時にリーダーがDBテーブルからの結果を持っていることがわかりますが、何らかの理由で常に「While Reader.Read」をスキップし、次にスキップして接続を閉じ、データを読み取らずに閉じます。

    SqlConnection con = new SqlConnection(connectionString);
    SqlCommand cmd = new SqlCommand("lbx_EmailDomains_SELECT", con);
    cmd.CommandType = CommandType.StoredProcedure;

    con.Open();
    SqlDataReader reader = cmd.ExecuteReader();

    if (reader.HasRows)
    {
        while (reader.Read())
        {
           // Never Reaches Here
        }
    }

    reader.Close();
    con.Close();

更新: reader.HasRows を削除すると、問題が修正されました。

4

1 に答える 1

4

私の推測では、実際には までは進んでいませんreader.Read()。あなたがまだ電話していないという理由だけで、それreader.HasRowsは false を返していると思いますreader.Read()

正直なところ、テスト for はまったく役に立たないと思いますHasRows- 私はそれを取り除くだけです.

例外が発生した場合でも接続/リーダーが閉じられるように、usingステートメントを使用して手動呼び出しを取り除く方がよいことに注意してください。Close()

編集:コメントによると:

  • それはうまくいくはずで、このパターンはいくつかの MSDN ドキュメントに示されています
  • HasRowsfalseが返さtrueれる前に明らかに戻っていたreader.Read()
  • テストを削除すると、HasRows明らかに問題が修正されました。奇数。

ここで私たちが知らないデバッガーの相互作用があるのだろうか...

于 2012-09-12T22:35:47.697 に答える