您好我有一个简单的问题,即将数据更新到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号,我该怎么做?
答案 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++;
}