从列表中更新SQL数据库中的每条记录

时间:2013-10-31 10:55:52

标签: c# sql sql-server database list

您好我有一个简单的问题,即将数据更新到MS MySql Database 2012表中。我拥有的表名为COMPLETED,有3个字段。 student_ID(int,NOT allow nulls) 完成(bool,不允许空值) random_code(字符串,允许空值)

在c#中,我有一个填充了唯一随机码的列表。我希望所有代码都更新到数据库中,所以如果我有20条记录,我希望将20个唯一代码更新到random_code字段中。因此,第一个记录获取第一个代码,秒记录获取第二个代码,依此类推。我认为最好的方法是使用foreach,并且对于代码列表中的每个代码,将该代码更新到我的数据库中的random_code字段中。

    foreach (string unRaCo in codes)
    {
        //insert database
        SqlCommand toDB = new SqlCommand("UPDATE COMPLETED SET random_code = '"+ unRaCo +"'  ", conn);
        SqlDataReader toDBR;
        toDBR = toDB.ExecuteReader();
        toDBR.Close();
    }

我遇到的问题是更新查询使用第一个代码更新所有记录,因此第一个记录的代码为12345,但所有其他记录也都有该代码。我想将12345更新为记录1,将54321更新为例如2号,我该怎么做?

3 个答案:

答案 0 :(得分:2)

您的UPDATE查询缺少WHERE关键字,您必须在其中使用StudentID。

这样的事情:

"UPDATE COMPLETED SET random_code = '"+ unRaCo +"'  "+"WHERE student_ID ="+ _studentidvariable_

答案 1 :(得分:2)

我建议使用Hashtable,其中studentID为关键字,code为值。 对于Hashtable中的每个条目(学生)都是唯一的代码。

然后你可以这样做:

 UPDATE COMPLETED SET random_code = (the code provided by hashtable) WHERE student_id = (Hashtable KEY)

答案 2 :(得分:0)

嗯,现在似乎已经接受了答案。尽管如此,这应该只使用代码循环。

var count = 0;
foreach (string unRaCo in codes)
{
    //insert database
    SqlCommand toDB = new SqlCommand(@"UPDATE c SET c.random_code = '" + unRaCo +"'
    FROM COMPLETED c
    JOIN (SELECT ROW_NUMBER() OVER (ORDER BY student_ID) AS number,
    Student_ID FROM COMPLETED) num ON num.student_ID = c.student_id
    WHERE num.number = " + count, conn);
    SqlDataReader toDBR;
    toDBR = toDB.ExecuteReader();
    toDBR.Close();
    count++;
}