2016-11-07 9 views
-6

私は航空会社の予約システムを利用しています。すべてのデータをデータベースに挿入すると、ダブルデータが挿入されます。なぜこれが起こったのですか? これは私のコードです:ダブルデータをデータベースasp.netに挿入するC#

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

だと思います。 @Jonesopolis –

+0

理由のためにVisual Studioにデバッグメニューがあります。 – Will

答えて

0

ここでは2つの悪い習慣があります。

まず、単純にSQLパラメータを連結するのではなく、SQLパラメータを使用する必要があります。 SQLインジェクションを避ける。 hereを読んでください。

第2に、HTTP GET(Page_Load)に挿入しないでください。これをHTTP POSTで行い、HTTP GET(PRGパターン)に再度リダイレクトする必要があります。

ダブルインサートの理由は、同じページを2回(この場合はPage_Load)押したことが原因である可能性があります。 PRGパターンを適用すると気づいたことがあるでしょう。

Post-Redirect-Get with ASP.NETを参照してください。

1

画像ボタンをクリックしている場合があります。最初のデータはページのロードに挿入され、イメージボタンのクリックによりポストバックが発生した後に2番目のデータが挿入されるためです。これを避けるには、内部にインサートロジックを置くことで回避できます。

if(!Page.IsPostBack) 
{ 
    // insert code 
} 

まだページロード時にデータを挿入する理由が混乱しています。あなたを悩ますために、誰かがデータベースをあまりにも多く埋めることができます。

+0

前のページでユーザーが入力した情報を表示したいので、値を直接ページの読み込みに渡します。 –

+0

最初に値を保存してからリダイレクトすることができます。 – Imad

関連する問題