2009-08-19 19 views
0

我有一些C#代碼動態生成一個SQL查詢,並通過IDbCommand.ExecuteScalar()執行它。這工作正常;只有一個結果與我在數據庫中的查詢匹配,並且總是返回結果。爲什麼IDbCommand.ExecuteReader()在IDbCommand.ExecuteScalar()成功時失敗?

但是就在最近,作爲支持DB中多重匹配的重構的第一步,我用一個ExecuteReader()替換了對ExecuteScalar()的調用。設置和數據庫訪問中的其他一切都是一樣的。但是返回的IDataReader不包含任何數據,並且每當我嘗試從中取出數據時都拋出InvalidOperationExceptions。

我知道數據還在;當我切換回ExecuteScalar()時,一切正常。這怎麼可能?

回答

1

請確保您在嘗試訪問之前調用IDataReaderRead()方法,該方法返回ExecuteReader()。調用Read()將使讀者進入結果集的第一行(僅在您的情況下)。如果您在訪問IDataReader之前未打電話Read(),那麼當您嘗試訪問其數據時,您會收到InvalidOperationException - 正如您所遇到的。

+0

我正在使用NextResult()而不是Read()。哎呦。 – 2009-08-20 13:18:58

0

這是否與在同一連接上打開多個IDataReaders有關?

因爲你不會得到使用的ExecuteScalar()這個問題,但一旦你開始使用的ExecuteReader(),你需要(通過使用「使用」塊EG)

以確保在同一連接上所有以前的DataReader關閉

用InvalidOperationException得到的錯誤信息是什麼?

相關問題