C# 正在检查sql server中的表是否已使用SET LOCK\u超时0锁定

C# 正在检查sql server中的表是否已使用SET LOCK\u超时0锁定,c#,asp.net,sql-server,asp.net-mvc,C#,Asp.net,Sql Server,Asp.net Mvc,基本上,我需要检查表是否被代码锁定 我知道如果我直接在DB上运行它 SELECT * FROM 'tablename' SET LOCK_TIMEOUT 0 如果表被锁定,我会立即出错;如果表没有被锁定,我会立即出错。然而,当我从代码中调用此语句时,它似乎仍在等待一段时间,等待锁释放后再返回。我用来调用这个查询的代码是 SqlConnection conn = new SqlConnection(@"ConnectionString"); using(conn) { conn.Open

基本上,我需要检查表是否被代码锁定

我知道如果我直接在DB上运行它

SELECT * FROM 'tablename' SET LOCK_TIMEOUT 0
如果表被锁定,我会立即出错;如果表没有被锁定,我会立即出错。然而,当我从代码中调用此语句时,它似乎仍在等待一段时间,等待锁释放后再返回。我用来调用这个查询的代码是

SqlConnection conn = new SqlConnection(@"ConnectionString");
using(conn)
{
    conn.Open();
    var query = new SqlCommand("SELECT * FROM tablename SET LOCK_TIMEOUT 0", conn);

    try
    {
        SqlDataReader reader = query.ExecuteReader();
        // No lock
    }catch (Exception)
    {
        // Deal with lock exception
    }
} 

我想马上知道。有什么建议吗?或者有更好的方法吗?

不清楚你想要达到什么目标,目的是什么,但是你在选择之后设置锁定超时,而你需要在选择之前设置锁定超时,不清楚你想要达到什么目标,目的是什么,但是您在选择后设置锁超时,而需要在选择前设置锁超时

如果您指的是事务锁,请选中此项:

select
  object_name(resource_associated_entity_id) as 'TableName' ,*
from
  sys.dm_tran_locks
where resource_type = 'OBJECT'
  and resource_database_id = DB_ID() and 
  object_name(resource_associated_entity_id) = N'YourTableName'

如果表未被任何事务锁定,则不会返回任何行

如果您指的是事务锁定,请选中此项:

select
  object_name(resource_associated_entity_id) as 'TableName' ,*
from
  sys.dm_tran_locks
where resource_type = 'OBJECT'
  and resource_database_id = DB_ID() and 
  object_name(resource_associated_entity_id) = N'YourTableName'

如果表未被任何事务锁定,则不会返回任何行

可能是这样的:

select
  object_name(resource_associated_entity_id) as 'TableName' ,*
from
  sys.dm_tran_locks
where resource_type = 'OBJECT'
  and resource_database_id = DB_ID()

这将为您提供当前查看的所有表格

可能是这样的:

select
  object_name(resource_associated_entity_id) as 'TableName' ,*
from
  sys.dm_tran_locks
where resource_type = 'OBJECT'
  and resource_database_id = DB_ID()
这将为您提供当前查看的所有表