gpt4 book ai didi

c# - 使用 LINQ-to-SQL 更新行时的 ChangeConflictException

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:00 26 4
gpt4 key购买 nike

我有一个包含数据网格和保存按钮的表单。

当用户单击保存按钮时,我通过检查特定列来检查新行。如果它的值为 0,我将该行插入到数据库中,如果列值不为 0,那么我更新该行。

我可以正确插入但是更新时出现异常:

ChangeConflictException was unhandled,1 of 6 updates failed.

我已经检查了更新声明,我确信它是正确的。有什么问题,谁能帮帮我?

int id;
for (int i = 0; i < dgvInstructores.Rows.Count - 1; i++)
{
id = int.Parse(dgvInstructores.Rows[i].Cells["ID"].Value.toString());
if (id == 0)
{
dataClass.procInsertInstructores(name, nationalNum, tel1, tel2,
address, email);
dataClass.SubmitChanges();
}
else
{
dataClass.procUpdateInstructores(id, name, nationalNum, tel1, tel2,
address, email);
dataClass.SubmitChanges();
}
}

我正在使用linq查询sql server2005数据库和vs2008

“procUpdateInstructores”的存储过程是:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER proc [dbo].[procUpdateInstructores]
@ID int,
@name varchar(255),
@NationalNum varchar(25),
@tel1 varchar(15),
@tel2 varchar(15),
@address varchar(255),
@email varchar(255)
as
begin

BEGIN TRANSACTION

update dbo.Instructores
set
Name = @name , NationalNum = @NationalNum ,
tel1 = @tel1 , tel2 = @tel2 , address = @address , email = @email
where ID = @ID

IF (@@ROWCOUNT > 0) AND (@@ERROR = 0)
BEGIN
COMMIT TRANSACTION
END
ELSE
BEGIN
ROLLBACK TRANSACTION
END
end

最佳答案

根据我的经验,(使用 .net 表单和带有 linq-to-sql 的 mvc)我多次发现,如果表单集合包含数据对象的 ID 参数,那么更新肯定会失败。

即使 ID 是实际 ID,当您绑定(bind)它、更新它或分配给另一个变量时,它仍然被标记为“propertyChanged”。

因此我们可以看到您的存储过程的代码吗?更具体地说,更新过程?

您上面发布的代码很好,异常应该来自您的存储过程。

但是,如果您确信过程是正确的,那么或许可以查看用于生成表格的 HTML 代码。 ID 列上的 0/1 等可能存在一些错误。

关于c# - 使用 LINQ-to-SQL 更新行时的 ChangeConflictException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7943200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com