問題排查:DataReader 的詭異狀況

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

具體情況是: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-08-19 19:20:59

問題排查:DataReader 的詭異狀況的相关文章

問題排查:.NETSystem.Runtime.Remoting.RemotingException: TCP 信道协议冲突: 应为报头。

這個錯誤訊息是在一個 Web Serveice 的偵錯階段發生的 目前還未找到原因,環境如下: 作業系統:Windows 10 x64 企業版 (簡中) 開發工具:Visual Studio 2013 Update 5 旗艦版 (繁中) 專案目標:.Net Framework 3.5 偵錯編譯平台:x64 同樣一個方案,在另一部電腦上偵錯就是正常的 兩者除了作業系統有差異之外,其餘都一樣 另一部電腦為 Windows 7 x64 旗艦版 (簡中) 問題排查:.NETSystem.Runtime.

問題排查:行動裝置網頁前端 UI 設計 (1)

這是最近開始接手的一個微信公眾平台專案, 在重整後端程式碼時,因為也需要透過前端來看效果, 所以就因此在前端的部分遇到了不少問題, 畢竟這是以前沒接觸過的領域 (早年的網頁應用程式開發沒有那麼多分工) 經初步探索,得知此案似乎採用了 Intel 的 App Framework 套件, 大致上看一遍官網的簡介之後,就下載了最新版本 3.0 來玩玩看 然後就拿了一個有資料分頁的來嘗試 這不玩還好,一玩就捅了好幾個馬蜂窩等著我去收拾 頁面結構如下: <div class="view"

問題排查:行動裝置網頁前端 UI 設計 (2)

之前上網找了個星級評分的範例來玩, 當然這個範例已經用在另一個專案了, 目前看起來沒什麼狀況, 不過在移植到目前的專案之後, 就出現了怪現象: 1. 在大部份時間裡,點擊星星不會有任何反應 2. 即便星星可以點擊,也只能點擊一次 真是一怪還有一怪怪, 同樣的程式碼,在兩種環境的執行結果居然不一樣, 後來改用另一個方法實現評分功能, 就是用單選鈕來做, 可惜的是,結果也是一樣很奇怪, 在瀏覽器裡居然看不見單選鈕.

問題排查:沒有任何多載符合 System.Timers.ElapsedEventHandler 委派

這是在實作當前專案最後一個關鍵功能:提醒通知 所遇到的奇怪狀況 目前的設想,是以 Windows Form 結合 Timer,當作發送通知的載體 大家都知道在 C# 的環境裡,有三種內建的 Timer 可用:Windows Form Timer.System.Timer.Threading.Timer 遇到的怪事,主要是在 System.Timer 這一段 代碼如下: using System; using System.Drawing; using System.Text; using Sys

問題排查:System.BadImageFormatException: 未能加载文件或程序集“System.ServiceModel

錯誤訊息如下: System.BadImageFormatException: 未能加载文件或程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项.该模块应包含一个程序集清单. 文件名:“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934

問題排查:F5啟動偵錯後所提示的錯誤

開發環境:Visual Studio 2013 原始專案版本:Visual Studio 2005 啟動偵錯後,錯誤提示內容如下: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. 已知解法: 在 web.config 加入下列設定值 1 <system.webServer> 2 <validation validateIntegratedModeConfiguration="false&

[亂數] &lt;細說&gt; C/C++ 亂數基本使用與常見問題

陸陸續續寫了 EA  一.二年,以前亂數引導文回頭看時才發現,怎麼有這麼多細節的錯誤.沒系統. 這篇文章主要引導初學者使用亂數,同時附上常被翻出來討論的議題,C/C++適用,唯以 C 語言撰之. 也由於是引導初學者,所以在某些用詞上會較不正確, 像 compiler.IDE 會故意混為一談. 另外亂數原理也全都跳過 < 重點是亂數的產生原理也不只一種 >. 另本文附程式碼,不附執行結果,有興趣自己跑一遍. 最後請注意本文在區間表達裡,開區間與閉區間 括號的使用,也就是, [a, b]  ,  

STM32 I2C 總線佔用問題解析

这几天解决 STM32 MCU的I2C 总线占用(bus BUSY) 问题,觉得是不错的学习,从文中可得知I2C问题的思考逻辑逻,文末并指出经常出错的问题点,在此分享给大家. 问题描述 STM32F207 MCU有三组I2C,I2C1~I2C3,此项目的初版硬件使用I2C1接三颗chip (DSP/Codec/EEPROM),运作良好. 但新硬件把Codec/EEPROM移到I2C3,DSP还是留在I2C1,发现I2C3有机会传输失败,失败時log打总线占用(Bus BUSY) 查MCU dat

繁體字顯示問題

宋體筆畫設計簡單,加之hint的作用,所以實用性很高.MingLiU筆畫很有藝術性,hint不好做,所以必須用大字號才能看清楚其細節.因為電腦顯示技術的限制,導致其在普通字體大小下,筆畫基本上是貼在一起,非常不實用.日文有很多字體,主流是哪種我也不知道,不過總體的觀感就是既美觀又實用.簡體字設置成宋體13px,已經基本上能看清楚,正文是16px,效果更好,可以打80分.繁體字設置微軟正黑體,或者宋體,在16px就差強人意了.繁體字設置成MingLiU,如果要求筆畫不發虛,拐角能看清楚,則最少需要