在上一篇隨筆:SqlDataReader讀取分頁數據,pageCount你是腫么了?
遇到了很讓人頭疼的問題:SqlDataReader執行帶輸出參數的存儲過程總是獲取不到輸出參數的正確值。這里將解決辦法及分析過程列出,為遇到相同問題的小伙伴提供一種解決方案。
在SqlDataReader讀取分頁數據,pageCount你是腫么了?的評論中有博友提出將
param[2].Direction = ParameterDirection.Output;
該句代碼放在執行查詢前,確實有這一部分原因。按照該博友提供的方式我嘗試了,但仍有問題:
1 param[2].Direction = ParameterDirection.Output; 2 using (SqlDataReader reader = SQLHelper.ExecuteReader(sql, CommandType.StoredProcedure, param)) 3 { 4 5 while (reader.Read()) 6 { 7 list.Add(ConvertReaderToStudentModel(reader)); 8 } 9 } 10 //為輸出參數賦值 11 pageCount = (int)param[2].Value;
報錯:
出現這種原因,首犯肯定是param為空了,是什么原因導致的呢?
經調試發現罪魁禍首原來在SQLHelper中
在執行前 cmd.Parameters.Clear();
執行后:
DbParameterCollention的Count為0,也就是集合中沒有要加的參數了,所以出現“未將對象引用設置為對象的實例”的錯誤。
知道原因錯在什么地方了,就知道怎么改了。將該句注釋,就能得到輸出參數的值了。
結果:
但網上很多SQLHelper很多都有把參數情況的,難道以后遇到這樣的情況就要修改SQLHelper,肯定不行,遇到這種執行帶輸出參數的存儲過程,還是用DataSet比較好,總之各有各的好處。
這個問題折磨了我一星期了,今天終於解決了,很開心。
突然想到一句話,分享一下:"學習不以分享為目的,就是耍流氓......";