IDataReader.Read()は少なくとも1回は真実です(これについて私が間違っていると分かります)。それで、try/catchでラップするだけでレコードがないかどうかをどうやって伝えますか?IDataReaderが空であるかどうかを検出する最良の方法は何ですか?
答えて
if(dr.Read())
{
//do stuff
}
else
{
//it's empty
}
通常あなたはこのかかわらず、やる:
while(dr.Read())
{
}
これは私が試みたものですが、少なくとも1回は常に条件が真であると思われますが、リーダーから値を抽出しようとするとエラーが発生します。 –
これに注意してください、 'Read()' [読者は次の行に進みます](https://msdn.microsoft.com/en-us/library/system.data.idatareader.read(v = vs.110) ).aspx)。したがって、**ただ**データが含まれているかどうかを確認しないでください – Liam
インターフェイスを使用したい場合は、[はい、その後、偽まで読み取りテストするための唯一の方法です。汎用のIDataReader
実装をお探しの場合は、DbDataReader
を試してHasRows
プロパティを使用してください。
DbDataReaderは抽象クラスです – aku
@aku:はい、その点です。 IDataReaderは、(通常)IDataReaderを実装するDbDataReaderから派生するデータ型で実装されるインターフェイスです。 –
実際には、 'IDataReader' _object_には決して' Read() 'を呼び出さないでしょう。なぜなら、そのようなことはないからです。そして実際の実装では、 'DbdataReader'というオブジェクトを取得します。したがって、戻り値の型として 'IDataReader'に戻ってクラスをダウングレードしなければ、それを呼び出すことができます。そしてもしそれがダウングレードされても、それはチェックする価値があります: 'if(readerはDbDataReader)return((DbDataReader)reader).HasRows' – Nyerguds
あなただけのそれは純粋な悪だが、それは(通常は)働くSystem.Data.Common.DbDataReader
using (System.Data.IDataReader IReader = ICommand.ExecuteReader())
{
if (((System.Data.Common.DbDataReader)IReader).HasRows)
{
//do stuff
}
} // End Using IReader
にSystem.Data.IDataReader
をキャストすることができます;)
(、IDataReader
のインスタンスがカスタムADO.NETプロバイダによって実装されると仮定するとあなたのカスタムの愚かなクラスではなく、DbDataReader
[IDataReader
]から派生する代わりにIDataReader
を実装するだけです)。
はちょうどこの問題に出くわし、これを思い付いた...
bool isBeforeEoF;
do
{
isBeforeEoF = reader.Read();
if (isBeforeEoF)
{
yield return new Foo()
{
StreamID = (Guid)reader["ID"],
FileType = (string)reader["Type"],
Name = (string)reader["Name"],
RelativePath = (string)reader["RelativePath"]
};
}
} while (isBeforeEoF);
ありがとう。これが助けになりました! –
- 1. C#では、データセットが空であるかどうかをテストする最良の方法は何ですか?
- 2. JTextFieldが空白であるかどうかを検出する方法は?
- 3. Javascriptでブラウザ検出を行う最良の方法は何ですか?
- 4. GitHubを検索する最良の方法は何ですか?
- 5. RichTextBoxが空であるかどうかを検出する
- 6. Windowsフォームアプリケーションでメモリリークを検出する最も良い方法は何ですか?
- 7. SMOの存在を検出する最良の方法は何ですか?
- 8. AngularJsフォームのオブジェクト$ errorが空であるかどうかを検出する方法はありますか?
- 9. 動きを検出する最良のセンサーは何ですか
- 10. jspでlistが空であるかどうかを検証する方法は?
- 11. 衝突検出を行う最も良い方法は何ですか?
- 12. スクロールバーが最下部にあるかどうかを検出する方法は?
- 13. レンダリング時にHTMLコンテンツが空白/空白であるかどうかを検出する方法は?
- 14. Excel 2003がインストールされているかどうかを検出する最善の方法は何ですか?
- 15. ユーザーがBashでsudoできるかどうかをテストする最良の方法は何ですか?
- 16. テーブルの列が空であるかどうかを確かめる良い方法はありますか?
- 17. ファイルがPHPでファビコンであるかどうかを検出する方法は?
- 18. 入力ストリームが空である(EOFではなく)かどうかを検出する方法は?
- 19. RubyGems.orgがダウンしているかどうかをプログラムで検出する最も良い方法は?
- 20. ファイルが空であるかどうかを判断する最良の方法(php)?
- 21. 3つのテキストボックスが空であるかどうかを確認する最も良い方法
- 22. ウェブサイトのフォルダが存在するかどうかを確認する最良の方法は何ですか?
- 23. PHPにURLが存在するかどうかを確認する最良の方法は何ですか?
- 24. 小数のある値が定義された範囲にあるかどうかを検証する最も良い方法は何ですか
- 25. フォルダが空でないかどうかを検出する方法(Windowsバッチファイル)?
- 26. Pythonの行から抽出する最も良い方法は何ですか
- 27. grailsでサービスを扱う最良の方法は何ですか
- 28. リクエスト変数のリストが空であるかどうかを検出するPHP
- 29. UITextFieldsが空であるかどうかをチェックする方法?
- 30. HWNDがトップレベルのウィンドウを表すかどうかを判断する最も良い方法は何ですか?
ベンは正しいです。 IDataReaderが空の行セットから読み取っている場合、Read()の最初の呼び出しはfalseを返します(使用している特定の実装が正しく書かれていると仮定して)。 –