码迷,mamicode.com
首页 > 其他好文 > 详细

問題排查:DataReader 的詭異狀況

时间:2016-04-18 15:26:02      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

 這個問題很詭異,同樣的程式碼片段
而且還不止一個地方在用
原本都好好的,今天突然給我出狀況?

具體情況是:DataReader 的 Read() 明明已經返回 True,但居然沒有進入相應的判斷式

程式碼如下:

using(IDataReader dr = db.ExecuteReader(Cmd))
{
    WebLogs.Debug("接口驗證前置作業,是否有資料", dr.Read().ToString());

    if(dr.Read())
    {
        vxci.ID = dr["ID"].ToString();


        WebLogs.Debug("接口驗證前置作業,資料 dr[\"wxName\"] = ", dr["wxName"].ToString());
        WebLogs.Debug("接口驗證前置作業,資料 dr[\"Token\"] = ", dr["Token"].ToString());
    }
} 


如上程式碼所示,「是否有資料」的輸出已經是 True

但是竟然略過 if(dr.Read()) 沒有執行

後來將此片段改寫如下

using(DataTable dt = db.ExecuteDataTable(Cmd))
{
    WebLogs.Debug("資料筆數 dt.Rows.Count", dt.Rows.Count.ToString());
    WebLogs.Debug("資料大於 0 筆 dt.Rows.Count > 0", (dt.Rows.Count > 0).ToString());

    if(dt.Rows.Count > 0)
    {
        for(int i = 0; i < dt.Rows.Count; i++)
        {
            WebLogs.Debug("有資料dt[\"ID\"] = ", dt.Rows[i]["ID"].ToString());

            vci.ID = dt.Rows[i]["ID"].ToString();

            WebLogs.Debug("接口驗證前置作業,是否有修理厂信息vci.ID", vci.ID);
        }
    }
}

 

 

程式碼如上

改成這樣之後,狀況也是差不多詭異

「資料筆數」和「資料大於 0 筆」顯示都正確
迴圈內的 WebLogs.Debug("有資料dt[\"ID\"] = 顯示也正確
但 vci.ID = dt.Rows[i]["ID"].ToString(); 之後的卻沒有執行
 
 



問題排查:DataReader 的詭異狀況

标签:

原文地址:http://www.cnblogs.com/hsw1976/p/5404141.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!