使用List<>中的值更新SQL Server表C#

时间:2015-12-03 18:48:48

标签: c# sql sql-server

我一直在尝试使用存储在List<>上的计算结果更新表上的列。问题是,从List保存的数据只是第一个索引和数据保存仅来自List的第一个索引。这是代码:

private void UpdateStatus()
    {
        sqlcon = con.ConnectSQL();
        List<string> statusList = DetermineStatus();
        for (int i = 0; i < statusList.Count; i++)
        {
            sqlcon.Open();
            string sql = "update Table set Status= @status where Status is null";
            SqlCommand sqlcom = new SqlCommand(sql, sqlcon);
            using (sqlcom)
            {
                sqlcom.Parameters.Add(new SqlParameter("@status", statusList[i]));
                sqlcom.ExecuteNonQuery();
            }
            sqlcon.Close();
        }
    }

我很抱歉,如果这是一个有点愚蠢的问题,我也很抱歉英语不合适,因为英语不是我的第一语言。提前谢谢。

编辑:我想我没有澄清我之前想做的事情。因此,代码应该在我运行xls考勤数据导入后运行。因为数据只包含单独行的进入和退出时间,所以我一直在重新安排数据以及员工是否全职工作。

让我为你说明一下。

这是表格在数据库中的样子。

Date | TimeIn | TimeOut | ID | Status

对于xls数据,它的结构如下:

EventTime | ID | Name | Function

在一个工作日,员工应该两次登记,一次入境,一次出去,是否进入或退出是由功能栏决定的。从本质上讲,我要做的是:导入xls数据,将数据放入数据库中的相应列,并通过比较进入和退出的时间以及放置时间来确定员工是否工作了一整天列表中的结果。我在该子句上使用is null的原因是在导入新数据之后是Status列中没有数据的唯一数据。

所以,我遇到的问题是表中的数据正在由List的第一个索引更新。

例如,如果员工在第一天工作,而在下一天没工作。第一行的状态列应为Full Day,下一行not Full Day,但我在两行都获得Full Day

感谢您抽出宝贵时间回答我的问题。

1 个答案:

答案 0 :(得分:0)

您的代码存在的问题是,您的第一个UPDATE将更改Status为null的每一行的状态。之后,由于没有行的状态为null,因此不能使用其他值更新其他行。

你需要做的是为你的WHERE子句添加一个也与你的主键匹配的第二个参数 - 既然你没有提供你的表结构,也没有提供列表中的值,我们不能进一步帮助。