2013-10-31 93 views
0

您好,我有一个简单的问题,即将数据更新到MS MySql Database 2012表中。我有的表叫做COMPLETED,有3个字段。 student_id数据(INT,不许空值) 完成(BOOL,不许空值) random_code(字符串,允许空值)更新列表中的SQL数据库中的每条记录

在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

对不起,您能否澄清 - 这是MySQL还是Microsoft SQL Server 2012? – Paul

+0

Microsoft SQL server 2012 –

+0

在您之前的问题中解决了这个问题吗? http://stackoverflow.com/questions/19704150/c-sharp-list-items-to-database-sql/19704222#comment29269132_19704222 – Ric

回答

2

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

事情是这样的:

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

我会建议使用一个Hashtable与studentID作为重点和code作为值。 对于Hashtable中的每个条目(学生)都是唯一的代码。

然后,你可以只是做:

UPDATE COMPLETED SET random_code = (the code provided by hashtable) WHERE student_id = (Hashtable KEY) 
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++; 
}