我有这个存储过程来保存两个表 ACDPrograms 和 DefaultCourses 中的值。这是我的全局参数
create proc USPSvUpdtACDProgramFromTypes
@pPRGCode char(10),
@pPRGName varchar(100),
@pPRGDescr varchar(max),
@pFCTID int,
@pMinCredits int,
@pNZQA int,
@pNoOccrPerYear int,
@pFirstMonthOccr int,
@pSecondMonthOccr int,
@pDOMFee decimal(16,2),
@pINTLFee decimal(16,2),
@pIsAval int,
@pEmpID int,
@pSelCRSInfo as dbo.SelectedCourses READONLY,
@pPRGID int output
as
begin
Run Code Online (Sandbox Code Playgroud)
如您所见,用户定义的表类型 SelectedCourses 具有以下结构
create type dbo.SelectedCourses
as table
(
CntrNo int not null IDENTITY(1, 1),
CRSID int,
YearNo int,
IsCompulsory int,
EntDT datetime,
IsAval int,
EmpID int
);
go
Run Code Online (Sandbox Code Playgroud)
在我的存储过程中存在事务,因为它在 defualtCourses 表中存储了两行四行数据,其中一行存储在 ACDPrograms 中。我的存储过程没有 try/catch 块。当迭代循环来存储四行时,迭代的工作方式就像一个魅力,但是在循环外的最后一次迭代之后,当我尝试访问 @@rowcount …
我正在C#和SQL Server上开发一个房地产 Windows 窗体应用程序,这也是一个多用户应用程序。我没有在其中使用实体框架或 LINQ!
我正在努力解决如何正确处理乐观并发冲突。假设DB中有两张表,Properties和Addresses。
属性包含一般属性详细信息,例如type of
property、no of rooms等price。
地址具有属性地址。
当我的表单加载时,它将所有属性信息加载到datagridview. 在这种情况下,它将表中的所有信息Properties加载Addresses到datagridview.
当用户单击一行时,datagridview该行上的数据会加载到编辑表单中。然后用户更新并更新数据库。在这种情况下,可能会发生乐观并发冲突(OCV)。
但是,如何存储rowversion从“属性”和“地址”中获取的数据值,以有助于处理此 OCV 违规问题?
最初我正在考虑当用户双击该行时,“属性”和“地址”rowversions表中的该记录可以存储在事务表中。但是,在加载记录后,其他用户可以更改它们的值,因此显示的内容可能会过时。因此,当用户单击一行时,我需要将“网格”(而不是数据库)上的确切数据及其原始值发送到编辑表单。执行此操作的正确方法是什么?rowversiondatagridviewrowversion
PS我被告知处理 OCV 的正确方法是在 SQL 服务器中处理它,而不是在 ADO .NET 中处理,因为 OCV 是一种数据库操作。所以我更喜欢在数据库中处理它的指导!
谢谢
在Func通用温控功能并不需要void作为一个参数,因此我不能创建一个匿名方法的回报void,但有一种方式来创建一个返回匿名方法void?