0

こんにちは、MS MySql Database 2012 テーブルへのデータの更新に関する簡単な質問があります。私が持っているテーブルは COMPLETED と呼ばれ、3 つのフィールドがあります。student_ID (int、null は許可されません) completed (bool、null は許可されません) random_code (文字列、null は許可されます)

C# には、一意のランダム コードで満たされたリストがあります。すべてのコードをデータベースに更新したいので、20 個のレコードがある場合、20 個の一意のコードを random_code フィールドに更新したいと考えています。したがって、最初のレコードは最初のコードを取得し、秒のレコードは 2 番目のコードを取得するというようになります。これを行う最善の方法は、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、値としてを使用することをお勧めします。Hashtable の各エントリ (学生) は一意のコードになります。

次に、次のようにします。

 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 に答える