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