基本上我需要检查表是否已从我的代码中锁定。
我知道如果直接在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
}
}
我想马上知道。有什么建议?或者更好的方法呢?
答案 0 :(得分:2)
目前尚不清楚您要达到的目标是什么,目的是什么,但是您在之后设置锁定超时,而您需要在之前设置 >
答案 1 :(得分:1)
如果您的意思是交易锁定,请检查:
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'
如果表未被任何事务锁定
,则不会返回任何行答案 2 :(得分:1)
也许是这样的:
select
object_name(resource_associated_entity_id) as 'TableName' ,*
from
sys.dm_tran_locks
where resource_type = 'OBJECT'
and resource_database_id = DB_ID()
这将为您提供目前正在查看的表格的所有表格