C# 如何使用visual studio 2015实现行或表锁定?

C# 如何使用visual studio 2015实现行或表锁定?,c#,asp.net,sql-server,database,visual-studio,C#,Asp.net,Sql Server,Database,Visual Studio,我想添加多用户访问功能,这样我的web应用程序中就不会出现并发,有没有容易实现的方法?尽管可以在代码中指定锁定提示,但通常,锁定在大多数RDM中是透明的,并且使用基础引擎的锁定特性 您是否要求以独占方式访问资源?如果是这样,那么一个选项是使用sp_getapplock系统存储过程。您可以将关键部分逻辑放在事务中,并使用sql server的内置锁定来确保同步访问 CREATE PROC MyCriticalWork(@MyParam INT) AS DECLARE @Lock

我想添加多用户访问功能,这样我的web应用程序中就不会出现并发,有没有容易实现的方法?

尽管可以在代码中指定锁定提示,但通常,锁定在大多数RDM中是透明的,并且使用基础引擎的锁定特性

您是否要求以独占方式访问资源?如果是这样,那么一个选项是使用
sp_getapplock
系统存储过程。您可以将关键部分逻辑放在事务中,并使用sql server的内置锁定来确保同步访问

CREATE PROC MyCriticalWork(@MyParam INT)      
AS
    DECLARE @LockRequestResult INT
    SET @LockRequestResult=0

    DECLARE @MyTimeoutMiliseconds INT
    SET @MyTimeoutMiliseconds=5000--Wait only five seconds max then timeouit

    BEGIN TRAN

    EXEC @LockRequestResult=SP_GETAPPLOCK 'MyCriticalWork','Exclusive','Transaction',@MyTimeoutMiliseconds
    IF(@LockRequestResult>=0)BEGIN

        /*
        DO YOUR CRITICAL READS AND WRITES HERE
        */

        --Release the lock
        COMMIT TRAN
    END ELSE
        ROLLBACK TRAN               

尽管您可以在代码中指定锁定提示,但通常情况下,锁定在大多数RDM中是透明的,并且使用底层引擎的锁定特性

您是否要求以独占方式访问资源?如果是这样,那么一个选项是使用
sp_getapplock
系统存储过程。您可以将关键部分逻辑放在事务中,并使用sql server的内置锁定来确保同步访问

CREATE PROC MyCriticalWork(@MyParam INT)      
AS
    DECLARE @LockRequestResult INT
    SET @LockRequestResult=0

    DECLARE @MyTimeoutMiliseconds INT
    SET @MyTimeoutMiliseconds=5000--Wait only five seconds max then timeouit

    BEGIN TRAN

    EXEC @LockRequestResult=SP_GETAPPLOCK 'MyCriticalWork','Exclusive','Transaction',@MyTimeoutMiliseconds
    IF(@LockRequestResult>=0)BEGIN

        /*
        DO YOUR CRITICAL READS AND WRITES HERE
        */

        --Release the lock
        COMMIT TRAN
    END ELSE
        ROLLBACK TRAN               

这些将是底层数据库引擎的功能,而不是Visual Studio的功能。@marc_的底层数据库引擎,如mySQL?我可以知道怎么做吗?是的,没错——这取决于你使用的是哪种RDBMS。对于SQL Server,我强烈建议不要这样做!处理少数并发情况要比拥有需要管理的锁(如果有人离开他们的PC,将锁留在原地……)简单得多。这可以通过数据库隔离级别来完成(影响整个数据库),通过向SQL中添加锁定语句并使用事务来影响这些锁定的生存期,或者通过使用自定义逻辑来确定是否基于某些相关值更新某些数据。然而,每种方法都有其优点和缺点(如果有一种方法只是修复了并发性而没有缺点,那么它将内置到数据库的逻辑OOTB中,您就不需要问这个问题)。您目前面临的问题是什么?@marc_s我正在为一些表格做这件事,因为这些表格需要多用户访问。例如,用户A更新,而用户B在更新之前等待用户A完成。是否有sql语句可以打开锁定功能?这些将是底层数据库引擎的功能,而不是Visual Studio的功能。@marc_的底层数据库引擎,如mySQL?我可以知道怎么做吗?是的,没错——这取决于你使用的是哪种RDBMS。对于SQL Server,我强烈建议不要这样做!处理少数并发情况要比拥有需要管理的锁(如果有人离开他们的PC,将锁留在原地……)简单得多。这可以通过数据库隔离级别来完成(影响整个数据库),通过向SQL中添加锁定语句并使用事务来影响这些锁定的生存期,或者通过使用自定义逻辑来确定是否基于某些相关值更新某些数据。然而,每种方法都有其优点和缺点(如果有一种方法只是修复了并发性而没有缺点,那么它将内置到数据库的逻辑OOTB中,您就不需要问这个问题)。您目前面临的问题是什么?@marc_s我正在为一些表格做这件事,因为这些表格需要多用户访问。例如,用户A更新,而用户B在更新之前等待用户A完成。是否有sql语句来启用锁定功能?