如果我在一个方法中锁定了一行,然后从同一个类中的另一个方法调用该方法,它会保留锁吗?
锁定行方法(作为预备语句):
private const string SQL_CONNECTION = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
private DataTable GetTable()
{
var table = new DataTable();
using (var con = new System.Data.SqlClient.SqlConnection(SQL_CONNECTION))
{
con.Open();
using (var cmd = new System.Data.SqlClient.SqlCommand("SELECT * FROM MyTable;", con))
{
table.Load(cmd.ExecuteReader());
}
}
return table;
}
private int SaveApproved(int rowID, bool approved)
{
using (var con = new System.Data.SqlClient.SqlConnection(SQL_CONNECTION))
{
con.Open();
using (var cmd = new System.Data.SqlClient.SqlCommand("UPDATE MyTable SET IsApproved=@IsApproved WHERE ID=@ID;", con))
{
cmd.Parameters.Add("@IsApproved", SqlDbType.Bit).Value = approved;
cmd.Parameters.Add("@ID", SqlDbType.Int).Value = rowID;
return cmd.ExecuteNonQuery();
}
}
}
此方法将选择那些并创建一个列表(或数组)。 然后,同一个类中的方法将调用锁定行方法以获取列表/数组并执行实际更新。
另请注意,我确实希望在同一个线程中使用两种不同的方法(它是并发的)。
那么,它是否保留了更新方法的锁定?
答案 0 :(得分:4)
数据库锁与Java类或任何其他Java构造无关。它们与数据库事务相关联。在交易中完成的任何工作都将通过锁完成。锁定会阻止在不同交易中完成的任何工作。