首页 > 解决方案 > 使用 busno 和 date 防止超订票

问题描述

我正在从事小型项目并且是编码新手,我希望该系统成为一个预订系统,只要在特定日期预订特定巴士,那么该巴士将特定于该日期。例如,Bus12 预定在 8 月 21 日使用,那么如果管理员错误地尝试为其他事情预订同一辆巴士,则会根据检查日期和 busno 来阻止该预订。我只是使用网络表单,下面是我的数据库表和代码后面。请帮助我没有收到任何错误,当我刷新它时,我的数据库表中没有存储任何内容。我想要输入的日期和 Busno 是否与表中的相同然后阻止预订。

protected void Button1_Click(object sender, EventArgs e)
{
    string cs = ConfigurationManager.ConnectionStrings["MyDatabase1ConnectionString"].ConnectionString;    
    tbDate.Text = Calendar1.SelectedDate.ToShortDateString();

    using (SqlConnection con = new SqlConnection(cs))
    {    
        string check = "SELECT  BusNo, Date FROM Ticket WHERE (BusNo = @busno) AND(Date = @NewDate))";

        SqlCommand cmd = new SqlCommand(check, con);
        cmd.Parameters.AddWithValue("@busno", tbBusno.Text);
        cmd.Parameters.AddWithValue("@NewDate", DateTime.Parse(tbDate.Text));

        con.Open();
        using (SqlDataReader rdr = cmd.ExecuteReader())
        {
            while (rdr.Read())
            {
                if (rdr.HasRows)
                {
                    Response.Write("double booking");
                }
                else
                {
                    string insertQuery = "INSERT INTO Ticket (BusNo, Date, Time,Bickup,DropOff,Fare) VALUES (@busno ,@date , @time , @bickup , @dropoff ,@fare )";

                    SqlCommand cmd2 = new SqlCommand(insertQuery, con);
                    cmd2.Parameters.AddWithValue("@busno", tbBusno.Text);
                    cmd2.Parameters.AddWithValue("@date", DateTime.Parse(tbDate.Text));
                    cmd2.Parameters.AddWithValue("@time", tbTime.Text);
                    cmd2.Parameters.AddWithValue("@dropoff", tbDrop.Text);
                    cmd2.Parameters.AddWithValue("@bickup", tbBickup.Text);
                    cmd2.Parameters.AddWithValue("@fare", int.Parse(tbfare.Text));

                    con.Open();
                    cmd2.ExecuteNonQuery();
                    con.Close();
                }
            }
        }
    }
}

在此处输入图像描述

标签: c#ado.netdatabase-table

解决方案


可以尝试删除while (rdr.Read())部分吗?

所以你的代码将是

using (SqlDataReader rdr = cmd.ExecuteReader())
{
    if (rdr.HasRows)
    {
        Response.Write("double booking");
    }
    else
    {
        string insertQuery = "INSERT INTO Ticket (BusNo, Date, Time,Bickup,DropOff,Fare) VALUES (@busno ,@date , @time , @bickup , @dropoff ,@fare )";

        SqlCommand cmd2 = new SqlCommand(insertQuery, con);
        cmd2.Parameters.AddWithValue("@busno", tbBusno.Text);
        cmd2.Parameters.AddWithValue("@date", DateTime.Parse(tbDate.Text));
        cmd2.Parameters.AddWithValue("@time", tbTime.Text);
        cmd2.Parameters.AddWithValue("@dropoff", tbDrop.Text);
        cmd2.Parameters.AddWithValue("@bickup", tbBickup.Text);
        cmd2.Parameters.AddWithValue("@fare", int.Parse(tbfare.Text));

        con.Open();
        cmd2.ExecuteNonQuery();
        con.Close();
    }
}

推荐阅读