我沒有在年齡(我更喜歡使用ORM)使用DataReaders,但我被迫在工作。我拉回行,並檢查HasRows
是否屬實;在這一點進行調試並檢查讀者表明我的數據在那裏。DataReader有行和數據,試圖從它讀取說「沒有數據存在」
現在遇到了這個問題:當我打電話給reader.Read()
時,試圖展開結果顯示「枚舉沒有結果」或任何其他內容,並且我得到「無數據存在時無效嘗試讀取」。錯誤。如果我不呼叫Read()
(這是DataReader在第一條記錄之前啓動的默認值),我會得到相同的結果。
我不記得正確的方法來處理這個;數據是那裏,當我檢查HasRows
,但是我不是在我打電話Read
之後或之後嘗試從它讀取的那一刻,這是沒有意義的,因爲如果我不打電話Read
,讀者應該仍然在之前第一個記錄,如果該屬性設置爲在第一個記錄(SingleRow?我忘記了它的名稱)時啓動它,那麼我應該能夠在不調用Read的情況下讀取行,但是這兩種方式似乎都是以前移動的包含數據的行。
我忘了什麼?代碼相當簡單:
TemplateFile file = null;
using (DbDataReader reader = ExecuteDataReaderProc("GetTemplateByID", idParam))
{
if (reader.HasRows) // reader has data at this point - verified with debugger
{
reader.Read(); // loses data at this point if I call Read()
template = new TemplateFile
{
FileName = Convert.ToString(reader["FileName"]) // whether or not I call
// Read, says no data here
};
}
}
does'reader.Read()'return'true'或'false'?爲什麼不使用'if(reader.Read())'或'while(reader.Read())'? –
也 - 當你說「驗證與調試器」...如何*確切* *? (試圖查看你的測試是否可能破壞了數據) –
爲了確認@Marc的說法,我在過去的一個問題上懸停在可查詢變量上導致調試器獲取結果,這意味着代碼無法'完成,因爲你只能枚舉一次記錄(調試器完成)。這可能是同一件事嗎? (這也可能發生在手錶上嗎?) – Smudge202