c# - 使用 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();
}
}
}
}
}
解决方案
可以尝试删除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();
}
}
推荐阅读
- bash - 将 Radare2 终端输出保存到 Mac 的文本文件中
- mysql - Laravel 查询构建器从联接返回一行而不是多行
- javascript - 注销然后登录后数据不显示-reactjs
- amazon-web-services - 用户注册后如何在 aws cognito 中自动验证电子邮件。稍后状态后在 Cognito 中验证电子邮件
- git - git The requested URL returned error: 403 for push a new created branch on a public repository
- python - 将列表的字符串表示形式转换为列表而不使用任何包
- xpath - Octoparse Xpath 或 iframe 提取问题
- javascript - 在渲染反应路由之前等待异步函数的结果
- c - 变量值未分配给C中的另一个变量
- javascript - 花括号会改变这个函数的读取吗