我们是两名正在尝试使用asp.net功能开发网站的学生。我们来到这个问题:
我们有一个预订页面,登录用户可以注册活动,我们已经制作了一个单独的表格来处理注册。
在此表中,我们有来自session的Member_id和事件id。
然后我们继续检查数据库中的member_id和event_id,以确保同一成员不能两次注册同一事件。
protected void Page_Load(object sender, EventArgs e)
{
if (Session["Medlems_id"] == null)
Response.Redirect("medlemslogin.aspx");
if (!IsPostBack)
{
if (Session["RedirectedMessage"] != null)
{
lblmessage.Text = Session["RedirectedMessage"].ToString();
Session["RedirectedMessage"] = null;
}
}
}
protected void GridView1_RowCommand(Object sender, GridViewCommandEventArgs e)
{
// Få fat i Hold_id fra den valgte kolonne og gem det i variablen varHold_id
var varHold_id = GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[6].Text;
//DB CONNECTION
string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\drt.mdb;Jet OLEDB:Database Password=password";
OleDbConnection MyConn = new OleDbConnection(ConnStr);
MyConn.Open();
OleDbCommand Cmd = new OleDbCommand(StrCmd, MyConn);
Cmd.CommandText = "SELECT * FROM Booking WHERE Hold_ID = @Hold_idPar";
Cmd.Parameters.AddWithValue("Hold_idPar", varHold_id);
OleDbDataReader ObjReader = Cmd.ExecuteReader();
if (ObjReader.Read())
{
var antalPladser = Convert.ToInt32(ObjReader["Pladser"]);
var antalTilmeldte = Convert.ToInt32(ObjReader["Tilmeldte"]);
var holdnavn = Convert.ToString(ObjReader["Hold"]);
var Medlems_idva = Session["Medlems_id"];
if (antalPladser > 0)
{
OleDbCommand dbcmd = new OleDbCommand(StrCmd, MyConn);
dbcmd.CommandText = "Select Hold_id FROM Tilmelding WHERE Hold_id = @Hold_idPar AND Medlems_id = @Medlems_idPar";
dbcmd.Parameters.AddWithValue("Medlems_idPar", Medlems_idva);
dbcmd.Parameters.AddWithValue("Hold_idPar", varHold_id);
OleDbDataReader ValReader = dbcmd.ExecuteReader();
if (ValReader.Read())
{
lblmessage.Text= "Du er allerede tilmeldt";
}
else {
OleDbCommand Cmd3 = new OleDbCommand(StrCmd, MyConn);
Cmd3.CommandText = "UPDATE Booking SET Tilmeldte = Tilmeldte+1, Pladser = Pladser-1 WHERE Hold_ID = @Hold_idPar";
Cmd3.Parameters.AddWithValue("Hold_idPar", varHold_id);
Cmd3.ExecuteNonQuery();
OleDbCommand Cmd2 = new OleDbCommand(StrCmd, MyConn);
Cmd2.CommandText = "INSERT INTO Tilmelding (Medlems_id, Hold_ID) VALUES (@Medlems_idPar, @Hold_idPar)";
Cmd2.Parameters.AddWithValue("Medlems_idPar", Medlems_idva);
Cmd2.Parameters.AddWithValue("Hold_idPar", varHold_id);
Cmd2.ExecuteNonQuery();
Session["RedirectedMessage"] = "Du er tilmeldt holdet" + holdnavn;
Response.Redirect("Kalender.aspx");
}
//Response.Redirect("Kalender.aspx");
}
else
{
lblmessage.Text = "Der er ikke flere pladser";
}
}
ObjReader.Close();
MyConn.Close();
}
private object Int32(object p)
{
throw new NotImplementedException();
}
public string StrCmd { get; set; }
我们现在的问题是,会员可以继续注册活动。但是如果事件ID和成员ID相同,那么由于某种原因它可以正常工作。
以下是数据库的一些翻译,因为我们使用丹麦语来命名数据库。
Hold_id=Event_id
Medlems_id=Member_id
希望你能帮助我们,因为我们的头发变得很灰。
答案 0 :(得分:0)
在插入之前,您可以使用以下查询:
select Event_Table.Event_Id from Event_Table inner join Member_Table
on Event_Table.Event_Id=Member_Table.Event_Id
如果您从上述查询中选择的Event_Id与会话中的事件ID匹配,则不要注册该成员。 (假设您的包含Events的表是'Event_Table',包含Member Sign up的表是'Member_Table')