SqlDataReader執行帶輸出參數存儲過程 錯誤分析


在上一篇隨筆: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比較好,總之各有各的好處。

這個問題折磨了我一星期了,今天終於解決了,很開心。

突然想到一句話,分享一下:"學習不以分享為目的,就是耍流氓......";


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM