3

私はすべてうまくコンパイルされた航空会社の予約システムに取り組んでいます...ユーザーはサイトに登録し、利用可能なフライトを確認してからフライトを予約できるようになっていますが、フライトの予約に関して問題が発生していますデータベースに挿入できず、エラーがポップアップ表示されます

SqlException was unhandled by user code
Violation of PRIMARY KEY constraint 'PK_Plist'. Cannot insert duplicate key in object 'dbo.Plist'.
The statement has been terminated.

これは私のコードであり、このコードで例外が点滅しています

int i = cmd.ExecuteNonQuery();

完全なコード

protected void Button1_Click1(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(constring);
        SqlCommand cmd = new SqlCommand();
        cmd.CommandType = CommandType.Text;
        cmd.Connection = con;
        con.Open();
        cmd.CommandText = "select flightid from schedule where flightid='" + DropDownList1.Text + "' and Flightname='" + DropDownList2.Text + "' and Fromstation='" + DropDownList3.Text + "' and Tostation='" + DropDownList4.Text + "' and dateandtimings='" + DropDownList6.Text + "'";
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd;
        DataSet ds = new DataSet();
        da.Fill(ds, "emp");
        if (ds.Tables["emp"].Rows.Count > 0)
        {

            cmd.CommandText = "insert into Plist(Pid,passengername,flightid,Flightname,Fromstation,Tostation,category,Dateandtimings) values('" + Autonumber() + "','" + TextBox1.Text + "','" + DropDownList1.Text + "','" + DropDownList2.Text + "','" + DropDownList3.Text + "','" + DropDownList4.Text + "','" + DropDownList5.Text + "','" + DropDownList6.Text + "')";
            int i = cmd.ExecuteNonQuery();
            cmd.CommandText = "update pid set pid='" + Autonumber() + "'";
            int k = cmd.ExecuteNonQuery();
            if (DropDownList5.Text == "Firstclass")
            {
                cmd.CommandText = "update schedule set Firstclass=Firstclass-1 where flightid='" + DropDownList1.SelectedValue + "'";
                int j = cmd.ExecuteNonQuery();
            }
            else if (DropDownList5.Text == "Bussinessclass")
            {
                cmd.CommandText = "update schedule set Bussinessclass=Bussinessclass-1 where flightid='" + DropDownList1.SelectedValue + "'";
                int j = cmd.ExecuteNonQuery();


            }
            else
            {
                cmd.CommandText = "update schedule set Economicclass=Economicclass-1 where flightid='" + DropDownList1.SelectedValue + "'";
                int j = cmd.ExecuteNonQuery();
            }
            if (i > 0)
            {
                Label.Visible = true;
                Label.Text = "success";
            }

            else
            {
                Label.Visible = true;
                Label.Text = "error";
            }

            Label16.Visible = true;
            Label16.Text = "Your Ticket ID is " + a;
            con.Close();
        }
        else
        {
            Label16.Visible = true;
            Label16.Text = "There is no flight with these details so please check flight schedule and submit your request";
        }

    }
    protected void SqlDataSource4_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {

    }
    protected void SqlDataSource5_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {

    }
}
4

5 に答える 5

2

例外は、重複した主キーを挿入していることを示しています。おそらく Pid がこの主キーです。

できることは、挿入から Pid を取り出すことです。Pid の値はデータベース自体から取得されます。通常、主キーはカウンターから取得されます。

于 2012-10-25T09:31:40.603 に答える
2

主キー フィールドに値を挿入しようとしています。列の ID を設定して、SQL が ID を重複なく自動的に作成するようにしてください。

于 2012-10-25T09:33:01.023 に答える
1

重複した主キー レコードを挿入しようとしており、それがエラーの原因です。insert ステートメントの主キーの値を確認する

于 2012-10-25T09:28:41.297 に答える
1

重複する主キーをテーブル Plist に挿入しようとしています。主キーは一意である必要があります。あなたが使用しているこの自動採番方法は良くないようです。ID 列になるように PID 列を変更できます。ID列を使用すると、SQLサーバーは、挿入する各レコードに一意の連続番号を提供します。

SQL ID http://msdn.microsoft.com/en-us/library/ms186775.aspx

于 2012-10-25T09:33:37.583 に答える
1

やりたいことは、最初に既存のレコードを確認し、存在しない場合は新しいレコードを追加することです。コードは常に新しいレコードを追加しようとします。

if notexists(select id from tabname where id='yourid')

begin

    -- Your insert statement

end

else

begin

    return 0 -- for existing value

end
于 2012-10-25T10:22:16.740 に答える