C# 使用车号和日期防止超额订票

C# 使用车号和日期防止超额订票,c#,ado.net,database-table,C#,Ado.net,Database Table,我在做一个小项目,我是新的编码,我希望该系统是一个预订系统,每当特定的巴士被预定为特定的日期,然后该巴士将特定于该日期。例如,12路公交车预定在8月21日使用,如果管理员错误地试图预订同一辆公交车,则根据检查日期和公交车号来阻止预订。我只是在使用web表单,下面是我的数据库表和隐藏代码。请帮助我,我没有收到任何错误。当我刷新数据库表时,数据库表中没有存储任何内容。我希望输入的日期和序号是否与表中的日期和序号相同,然后阻止预订 protected void Button1_Click(object

我在做一个小项目,我是新的编码,我希望该系统是一个预订系统,每当特定的巴士被预定为特定的日期,然后该巴士将特定于该日期。例如,12路公交车预定在8月21日使用,如果管理员错误地试图预订同一辆公交车,则根据检查日期和公交车号来阻止预订。我只是在使用web表单,下面是我的数据库表和隐藏代码。请帮助我,我没有收到任何错误。当我刷新数据库表时,数据库表中没有存储任何内容。我希望输入的日期和序号是否与表中的日期和序号相同,然后阻止预订

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();
                }
            }
        }
    }
}

可以尝试删除
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();
    }
}

您的代码是正确的,您也在检查重复输入条件,您说它没有在sql server中插入数据,只需调试
按钮1\u单击每一行的事件代码,您就会发现问题。您确定没有任何异常吗?此代码将失败并出现语法错误。日期和时间是保留关键字,如果不将它们括在方括号中,则无法在查询中使用。请显示我是否应该这样做。请提供提示。在日期和时间字段名称周围的插入中选择相同的BusNo,[Date]是的,我将尝试删除while循环。我已删除的任何内容都不起作用,但仍然看不到任何数据。是否发生任何异常?有没有像“双重预订”之类的输出?什么都没有发生。我看不出有什么意义,所以如果你做一个调试,一步一步地运行,没有例外吗?你能看到程序是否进入
else
部分吗?