這個問題很詭異,同樣的程式碼片段
而且還不止一個地方在用
原本都好好的,今天突然給我出狀況?
具體情況是: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(); 之後的卻沒有執行
时间: 2024-11-06 07:17:57