0

您好我有一个关于将数据更新到 MS MySql 数据库 2012 表中的简单问题。我拥有的表称为 COMPLETED,有 3 个字段。student_ID (int, 不允许空值) 完成 (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 中,我该怎么做?

4

3 回答 3

2

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

像这样的东西:

"UPDATE COMPLETED SET random_code = '"+ unRaCo +"'  "+"WHERE student_ID ="+ _studentidvariable_
于 2013-10-31T11:09:33.063 回答
2

我建议使用studentID作为键和code作为值的哈希表。哈希表中的每个条目(学生)将是一个唯一的代码。

然后你可以这样做:

 UPDATE COMPLETED SET random_code = (the code provided by hashtable) WHERE student_id = (Hashtable KEY)
于 2013-10-31T11:10:59.137 回答
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++;
}
于 2013-10-31T11:27:05.550 回答