我正在做航空预订系统。当我将所有数据插入数据库时,它会插入双数据。为什么会这样? 这是我的代码:
public partial class CompleteOrder : System.Web.UI.Page
{
string SeatNum;
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-28L03QE\SQL2014;Initial Catalog=Airline;Integrated Security=True;Pooling=False");
con.Open();
Random rnd = new Random();
int ordernum = rnd.Next(3, 10000);
string Name = Request.QueryString["name"];
string IC = Request.QueryString["ic"];
string Contact = Request.QueryString["contact"];
string SeatType = (string) (Session["seats"]);
SeatNum = Request.QueryString["seatnum"];
Label7.Text = Convert.ToString(ordernum);
Label4.Text = Name;
Label8.Text = IC;
Label10.Text = Contact;
Label14.Text = SeatType;
Label16.Text = SeatNum;
SqlCommand cmd = new SqlCommand("INSERT INTO [Table](OrderNum,Name,IdentificationNumber, ContactNumber, SeatType, SeatNumber)VALUES('" + Label7.Text + "','" + Label4.Text + "','" + Label8.Text + "','" + Label10.Text + "', '" + Label14.Text + "', '" + Label16.Text + "')", con);
cmd.ExecuteNonQuery();
con.Close();
}
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
Response.Redirect("~/Main.aspx?seatnum="+SeatNum);
}
}
请帮帮我,谢谢。
答案 0 :(得分:1)
可能是在点击图片按钮之后。因为第一个数据是在页面加载时插入的,第二个是在回发后由于图像按钮单击而插入的。您可以通过将插入逻辑保留在
中来避免这种情况if(!Page.IsPostBack)
{
// insert code
}
我仍然很困惑你为什么要在页面加载上插入数据。有人可能会过多地填满你的数据库来惹恼你。
答案 1 :(得分:0)
你有两个不好的做法。
首先,你应该使用sql参数而不是简单地连接它们;避免SQL注入。阅读permanently redirect。
其次,不要在HTTP GET(Page_Load)中插入。您应该在HTTP POST中执行此操作,然后再次重定向到HTTP GET(PRG模式)。
双重插入的原因可能是因为您在同一页面上打了两次(在这种情况下为Page_Load);如果您应用PRG模式,您会注意到的事情。
请参阅here。