C# C/ADO.NET-使用datatable中的SetField时跳过行?

C# C/ADO.NET-使用datatable中的SetField时跳过行?,c#,sql-server,datatable,ado.net,C#,Sql Server,Datatable,Ado.net,我有一个每天运行的控制台应用程序来更新我的数据库 每天,应用程序都会将所有票证数据拉入数据表 在本例中,我试图计算数据库中未响应的每个票证是否已超过分配给该票证的最大响应时间(以小时为单位)。票务报告日期与今天的日期 如果响应时间已过,则在“响应时间”列中设置的值为0,否则为1 将新票证添加到数据库时,它们的响应最初为NULL,直到运行此更新并计算响应时间是否已过 这是udpate之前的数据表 突出显示的单元格当前为空。更新后,它应该更改为0false,因为最大响应时间为1.00小时,并且该票证

我有一个每天运行的控制台应用程序来更新我的数据库

每天,应用程序都会将所有票证数据拉入数据表

在本例中,我试图计算数据库中未响应的每个票证是否已超过分配给该票证的最大响应时间(以小时为单位)。票务报告日期与今天的日期

如果响应时间已过,则在“响应时间”列中设置的值为0,否则为1

将新票证添加到数据库时,它们的响应最初为NULL,直到运行此更新并计算响应时间是否已过

这是udpate之前的数据表

突出显示的单元格当前为空。更新后,它应该更改为0false,因为最大响应时间为1.00小时,并且该票证是在2014年报告的,没有响应时间

这是更新后的数据表,它没有更改

它们是datatable中发生这种情况的几个实例,我只是在这里展示第一个实例

谁能说出问题出在哪里?为什么某些行在更新后被跳过并保留为空?除少数行外,它适用于大多数行。下面是我编写的更新代码

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.UpdatedResponse来实际更新数据库,否则您只是更改datarow行状态

您应该调用da2.UpdatedResponse来实际更新数据库,否则您只是更改datarow行状态

更新数据库不是真正的问题,我在代码的其他地方这样做。问题是在我的foreach循环中跳过了行并将其保留为null,因此每当我更新数据库时,都会在应该为0的位置应用null。您能否启动sql探查器并查看这些行是否真正正确更新?我没有使用过,我从未听说过。简单吗?是的,很简单。看看这个。它使用的是旧版本的SQLServer2005,但现在几乎是一样的更新数据库不是真正的问题,我在代码的其他地方这样做。问题是在我的foreach循环中跳过了行并将其保留为null,因此每当我更新数据库时,都会在应该为0的位置应用null。您能否启动sql探查器并查看这些行是否真正正确更新?我没有使用过,我从未听说过。简单吗?是的,很简单。看看这个。它使用的是旧版本的SQLServer2005,但现在基本相同