C# 正在检查sql server中的表是否已使用SET LOCK\u超时0锁定
基本上,我需要检查表是否被代码锁定 我知道如果我直接在DB上运行它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
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()
这将为您提供当前查看的所有表