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

您正在尝试在主键字段中插入一个值。尝试为该列设置一个标识,以便 sql 自动创建没有重复的 id

于 2012-10-25T09:33:01.023 回答
1

您正在尝试插入重复的主键记录,这就是错误的原因。检查插入语句的主键值

于 2012-10-25T09:28:41.297 回答
1

您正在尝试将重复的主键插入到表 Plist 中。主键必须是唯一的。我看起来您使用的这种自动编号方法不好。您可以更改 PID 列,使其成为标识列。使用标识列,sql server 将为您插入的每条记录提供一个唯一的序列号。

SQL 身份 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 回答