簡體   English   中英

C#/ ADO.NET-在數據表中使用SetField時會跳過行嗎?

[英]C#/ADO.NET - Rows being skipped while using SetField in datatable?

我有一個控制台應用程序,每天運行一次以更新我的數據庫。

每天,應用程序都會將所有票證數據提取到數據表中。

在這種特殊情況下,我試圖計算數據庫中尚未響應的每個故障單是否都超過了為該故障單分配的最大響應時間(以小時為單位)。 票務報告日期與今天的日期。

如果響應時間已過,則在Response_met列中將值設置為0(false),否則將設置為1(true)。

將新票證添加到數據庫后,它們的Response_Met最初為NULL,直到運行此更新並計算response_time是否已過去。

這是udpate之前的數據表。

在此處輸入圖片說明

突出顯示的單元格當前為NULL。 更新后,它應該更改為0(false),因為Max_response_time為1.00 HOUR,並且該故障單是在2014年報告的,並且沒有response_time。

這是更新后的數據表,已更改。

在此處輸入圖片說明

它們是數據表中發生的幾種情況,這里我只顯示第一個情況。

誰能說出問題在哪里? 為什么在更新后會跳過某些行並將其保留為NULL? 它適用於大多數行,除了少數行。 以下是我編寫的更新代碼。

using (SqlCommand cmd2 = new SqlCommand("SELECT INCIDENT_NO, Report_DT, MIN(theStart) as The_Start, RESPONSE_TIME, Response_met, max_response_time FROM Ticket_REPORT rr left JOIN TimeTracker ON Incident_NO=theTask where theStart is null and impact like '3%' or theStart is null and impact like '4%' GROUP BY INCIDENT_NO, Report_DT,RESPONSE_TIME,Response_met,MAX_RESPONSE_TIME", sqlConn))
            {
                var calc = new Calculation(holidays, new OpenHours("09:00;17:00"));//Calculates business hours
                SqlDataAdapter da2 = new SqlDataAdapter(cmd2);
                dtResponse.Clear();
                da2.Fill(dtResponse);

                foreach (DataRow row in dtResponse.Rows)
                {
                    var reportDT = row.Field<string>(dtResponse.Columns[1]);
                     //Check if business hours have passed alloted response time
                    if (TimeSpan.FromMinutes(calc.getElapsedMinutes(DateTime.Parse(reportDT), DateTime.Now)).TotalHours > (double)row.Field<decimal>(dtResponse.Columns[5]))
                    {
                        row.SetField(dtResponse.Columns[4], 0);
                    }
                }
                da2.Dispose();
            }

您應該調用da2.Update(dtResponse)來實際更新數據庫,否則您只是在更改數據行的行狀態

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM