文は、データベーステーブルのすべての行に影響更新:WHERE
句を指定しない
"UPDATE CurrentCourses SET CurrenteGrade ='" +
RandomLetter(grades) + "'"
は、このコードはランダムなグレードでループ内で毎回100回実行されますが、できることですべての行テーブルは最後に無作為化されたグレードを示します。最後のループがランダムなグレードとして 'E'を選択した場合、テーブルのすべての行はグレードEになります。前の5秒間にグレードが99回変更されています(コードは毎回変更されます)
sqlCommand.CommandText = "UPDATE CurrentCourses SET CurrenteGrade = ? WHERE Course_ID = ?";
そして、SqlCommandオブジェクトのパラメータを移入::。あなたが同じ学年にすべてのコースの行を変更したい場合は
)のコードが実行されて停止したとき、彼らは変更のみを停止実行している
を
sqlCommand.Parameters.AddWithValue("grade", RandomLetter(grades));
sqlCommand.Parameters.AddWithValue("course", "SoftwareEngineering101");
これは、あなたが何度も実行するようなものです(lo op多分)別のコースIDで毎回。考え方は、パラメータ値を変更してからクエリを再実行することです。
sqlCommand.CommandText = "UPDATE CurrentCourses SET CurrenteGrade = ? WHERE Course_ID = ?";
sqlCommand.Parameters.AddWithValue("grade", "a"); //dummy values
sqlCommand.Parameters.AddWithValue("course", "a"); //dummy values
//the loop does the real work, repeatedly overwiting param values and running:
foreach(var course in myCoursesArray){
sqlCommand.Parameters["grade"] = RandomLetter(grades);
sqlCommand.Parameters["course"] = course;
sqlCommand.ExecuteNonQuery()
}
アクセスするには? SQLのパラメータプレースホルダの場合は、?と同じ順序でパラメータを追加することが重要です。マークがSQLに表示されます。名前は無関係です - これは、sqlserverのようなより強力なDBシステムではそうではありません.SQLではパラメータの名前が付けられ、c#コードで指定された名前が問題になります。しかし、Accessベースのコードでは、ループの中でパラメータ値を新しい値で上書きするときに、名前に関する重要な唯一のことが使用されます。
注: .AddWithValue
の使用を避けるべき十分な理由がありますが、私はここには入りません。文字列連結を使用してSQLに値を作成しないようにすることが重要です。詳細については、bobbytables.comを参照してください。
テーブルにプライマリキーがありますか?キーを取得するために照会する必要がある場合は、各キーのwhere句を使用して更新を実行してください。また、SQLに値を連結する代わりに、SQLパラメーターを使用することも検討してください。 – juharr
'RandomLetter'メソッドのコードも表示できますか? –
アクセスDBを使用している場合は、なぜこれをMySqlとタグ付けしましたか? – juharr