C# 使用SQL Server和ASP.NET MVC 4更新多个表中的值

C# 使用SQL Server和ASP.NET MVC 4更新多个表中的值,c#,sql,.net,sql-server,asp.net-mvc-4,C#,Sql,.net,Sql Server,Asp.net Mvc 4,我有两个名为ProfileMain和UserDomainMain的表,我想使用model将两个表的列保存在一个表单中 保存时,我会遇到这样的错误 违反主键约束“PK__ProfileM__290C88E4EE2362CC”。 无法在对象“dbo.ProfileMain”中插入重复键。复制品 键值为(22)。声明已终止 我的程序代码: create procedure ProfileInsert @ProfileId varchar(50), @First varchar(50),

我有两个名为
ProfileMain
UserDomainMain
的表,我想使用model将两个表的列保存在一个表单中

保存时,我会遇到这样的错误

违反主键约束“PK__ProfileM__290C88E4EE2362CC”。 无法在对象“dbo.ProfileMain”中插入重复键。复制品 键值为(22)。声明已终止

我的程序代码:

create procedure ProfileInsert
    @ProfileId varchar(50),
    @First varchar(50),
    @Last varchar(50),
    @Gender varchar(50),
    @DOB varchar(50),
    @Country varchar(50),
    @Mobile varchar(50),
    @Email varchar(50),
    @State varchar(50),
    @City varchar(50),
    @UserDomainId varchar(50),
    @Tags varchar(50),
    @AreaofInterest varchar(50),
    @CurrentDomain varchar(50),
    @WorkingAt varchar(50)
as
begin
   insert into ProfileMain   
   values(@ProfileId, @First, @Last, @Gender, @DOB, @Country, @Mobile, @Email, @State, @City)

   insert into UserDomain 
   values(@UserDomainId, @ProfileId, @WorkingAt, @CurrentDomain, @AreaofInterest, @Tags)
end
以及我的保存方法:

SqlConnection con = new SqlConnection(conn);
con.Open();

SqlCommand cmd = new SqlCommand("ProfileInsert", con);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@ProfileId",SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@First", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@Last", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@Gender", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@DOB", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@Country", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@Mobile", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@Email", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@State", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@City", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@UserDomainId", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@WorkingAt", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@CurrentDomain", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@AreaofInterest", SqlDbType.VarChar);
cmd.Parameters.AddWithValue("@Tags", SqlDbType.VarChar);

cmd.ExecuteNonQuery();

con.Close();
return View("Index", promodel);

您可以按如下方式修改您的过程:

create procedure ProfileInsert
@ProfileId varchar(50),@First varchar(50),@Last varchar(50),@Gender varchar(50),@DOB varchar(50),@Country varchar(50),@Mobile varchar(50),@Email varchar(50),@State varchar(50),@City varchar(50),
@UserDomainId varchar(50),
@Tags varchar(50),@AreaofInterest varchar(50),@CurrentDomain varchar(50),@WorkingAt varchar(50)
as
begin
IF EXISTS(SELECT 1 from ProfileMain where ProfileId=@profileId)
BEGIN
   insert into ProfileMain values(@ProfileId,@First,@Last,@Gender,@DOB,@Country,@Mobile,@Email,@State,@City)
END
ELSE
BEGIN
   UPDATE ProfileMain SET First=@First,Last=@Last,Gender=@Gender,DOB=@DOB,Country=@Country,Mobile=@Mobile,Email=@Email,State=@State,City@City where ProfileId=@profileId;
END

insert into UserDomain values(@UserDomainId,@ProfileId,@WorkingAt,@CurrentDomain,@AreaofInterest,@Tags)
end

AddWithValue要求将值作为第二个参数写入数据库,而不是类型。此问题似乎与主题无关,因为用户应该在之前检查文档。请使用
如果存在(…)
,而不是
计数(*)>0
-在一个大表上,这可能会产生巨大的差异@谢谢,我编辑了我的回答。我使用了上述程序,但数据保存在第二个表中,而不是第一个表中。它在第一个表的所有列中存储22