Sqlparameter应该被分配Exception,如果我这样分配,则存在违反主键约束的异常

本文关键字:分配 存在 异常 约束 Exception 如果 Sqlparameter | 更新日期: 2023-09-27 18:09:32

我必须插入字段值,而不是作为主键的id,并设置标识(1,1(。存储过程也添加在底部。

protected void save_click(object sender, EventArgs e)
{
        con = new SqlConnection(s);
        con.Open();
        cmd = new SqlCommand("employeedtl", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add("@empname", SqlDbType.VarChar).Value =      TextBox1.Text;
        cmd.Parameters.Add("@empid", SqlDbType.Int).Value = int.Parse(TextBox2.Text);
        cmd.Parameters.Add("@empage", SqlDbType.Int).Value = int.Parse(TextBox3.Text);
        cmd.Parameters.Add("@empaddress", SqlDbType.VarChar).Value = TextBox4.Text;
        cmd.Parameters.Add("@empjoindate", SqlDbType.VarChar).Value = TextBox5.Text;
        cmd.Parameters.Add("@empproject", SqlDbType.VarChar).Value = TextBox6.Text;
        cmd.Parameters.Add("@empmobile", SqlDbType.BigInt).Value = Int64.Parse(TextBox7.Text);
        cmd.Parameters.Add("@empemail", SqlDbType.VarChar).Value = TextBox8.Text;
        cmd.Parameters.Add("@select", SqlDbType.Int).Value = 1;
        cmd.Parameters.Add("@id"); 
        cmd.ExecuteNonQuery();
        Label1.Text = "Inserted Successfully";
        con.Close();
        bindGrid(GridView1);
}
ALTER procedure [dbo].[employeedtl](@select int,@empid int,@empname varchar(50),@empage int,@empaddress varchar(max),@empjoindate varchar(50),@empproject varchar(50),@empmobile bigint,@empemail varchar(max))
    as
    begin
    if @select=1
    begin
    if Exists(select * from EmployeeDB where Empid=@empid)      
    begin
     update EmployeeDB set [EmpId]=@empid,[EmpName]=@empname,[EmpAge]=@empage,[EmpAddress]=@empaddress,[EmpJoin]=@empjoindate,[EmpProj]=@empproject,[EmpMobile]=@empmobile,[EmpEmail]=@empemail where Empid=@empid
     end
     else 
     begin
     insert into EmployeeDB(EmpId,EmpName,EmpAge,EmpJoin,EmpAddress,EmpProj,EmpMobile,EmpEmail) values(@empid,@empname,@empage,@empaddress,@empjoindate,@empproject,@empmobile,@empemail)
     end
     end
     else if @select=2
     begin
     delete from EmployeeDB where EmpId=@empid
     end
    end

Sqlparameter应该被分配Exception,如果我这样分配,则存在违反主键约束的异常

  1. cmd.Parameters.Add("@id");//删除此
  2. 删除ALTER PROCEDURE dbo.Employeetl中的@id
  3. 删除插入INSERT INTO EmployeeDB(EmpName, . . . )中的id

需要两次更改

  1. 将值传递给代码中的@id参数

    cmd.Parameters.Add("@id", SqlDbType.Int).Value = xxx; 
    
  2. 更改存储过程以更新INSERT命令

    INSERT INTO EMPTable(id,empname,empid,empage,empaddress,empjoindate,empproject,empm‌​obile,empemail,selec‌​t) values (@empname,@empid,@empage,@empaddress,@empjoindate,@empprojec‌​t,@empmobile,@empema‌​il,@select)
                  -------^
    

    从INSERT中删除该ID列及其值@id

更改存储过程

// SQL Server stored procedure
alter storedprocedure employeedtl (
    @id int = null,
    @empname nvarchar(50) = null,
    .
    .
    .
     )
// in .Net remove this line
cmd.Parameters.Add("@id");