2016-05-21 11 views
1

私はasp.netとC#のBodybuilding Gymウェブサイトを実装しています。 私は、クラスのためにジムメンバーを登録したいと思います。ヨガ、ABS。 「ワークアウト」と「参加者」という列にテーブルを追加したいとします。 テーブルには6つの列(ID、日付、種類、説明、ステータス、参加者)があります。 ここに私のコードです。データベース内のセルを更新しますが、前の値を削除しないでください

GridViewRow row = DataGrid1.SelectedRow; 
string hour = row.Cells[1].Text; 
string type = row.Cells[2].Text; 
string participant = Session["New"].ToString() + ", "; 

SqlConnection EnrolForConn = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginConnectionString"].ConnectionString); 
EnrolForConn.Open(); 
string EnrolForStatement = "update [Workout] set [Participants][email protected] where Date = '" + hour + "' and Type = '" + type + "'"; 
SqlCommand EnrolForCommand = new SqlCommand(EnrolForStatement, EnrolForConn); 
EnrolForCommand.Parameters.AddWithValue("@Participants", participant); 

int x = EnrolForCommand.ExecuteNonQuery(); 
if (x == 0) 
{ 
    ScriptManager.RegisterStartupScript(this, this.GetType(), "alertMessage", "alert('Error !!!');", true); 
} 
else 
{ 
    ScriptManager.RegisterStartupScript(this, this.GetType(), "alertMessage", "alert('You have been enrolled for class !!!');", true); 
} 

EnrolForConn.Close(); 

最初の参加者を追加すると機能します。しかし、私が2番目のものを追加すると(別のacountにログインしている)、最初のものが削除されます。私は以前の参加者を削除したくありません。

また、参加者の数を制限したいと思います。最大10人(参加者を分けるためにコンマを使用しています)。

アドバイスはありますか? ;) 事前に感謝!

答えて

4

実際には、Participantsカラムを参加者に存在する値で更新しているため、最後のものだけが永続化されます。

は、フィールド内のすべての参加者を持つためには、次のような何か書く必要があります:

// get all the participants in a list 
// e.g. IList<String> participantsList 
participant = String.Join(", ", participantsList); 

サイドノート:

をしかし、あなたのデータを正規化することをお勧めしますと、参加者のための別のテーブルがあります。このようにして、ユーザー/参加者のためのテーブルを定義し、イベントと参加者の間のX関係のみを保存することができます。

ストレージは保存されるだけでなく、イベントと参加者を扱う将来のクエリは、より簡単に記述できます(文字列の分割なし)。

また、パラメータ化することができるすべてのパラメータを使用するようにしてください:

string EnrolForStatement = "update [Workout] set [Participants][email protected] where Date = @Hour and Type = @Type"; 
EnrolForCommand.Parameters.AddWithValue("@Hour", hour); 
EnrolForCommand.Parameters.AddWithValue("@Type", type); 
関連する問題