Exemple #1
0
 /// <summary>
 /// Releases a mutex on the DB server.
 /// </summary>
 /// <param name="lockName">Unique name for the lock</param>
 /// <param name="owner">The owner of the lock. Partial support in different db servers.</param>
 /// <param name="dbPrincipal">The user that has permissions to the lock.</param>
 /// <returns><value>true</value> if the lock was release, <value>false</value> if failed, not exists or timed out.</returns>
 public virtual bool ReleaseLock(string lockName, SqlMutexOwner owner = SqlMutexOwner.Session, string dbPrincipal = null)
 {
     throw new NotImplementedException(@"ReleaseLock");
 }
Exemple #2
0
 /// <summary>
 /// Creates a mutex on the DB server.
 /// </summary>
 /// <param name="lockName">Unique name for the lock</param>
 /// <param name="owner">The owner of the lock. Partial support in different db servers.</param>
 /// <param name="timeout">Timeout</param>
 /// <param name="dbPrincipal">The user that has permissions to the lock.</param>
 /// <returns><value>true</value> if the lock was acquired, <value>false</value> if failed or timed out.</returns>
 public virtual bool GetLock(string lockName, TimeSpan timeout, SqlMutexOwner owner = SqlMutexOwner.Session, string dbPrincipal = null)
 {
     throw new NotImplementedException(@"GetLock");
 }
Exemple #3
0
        public override bool ReleaseLock(string lockName, SqlMutexOwner owner = SqlMutexOwner.Session, string dbPrincipal = null)
        {
            string ownerString = "Session";
            switch (owner)
            {
                case SqlMutexOwner.Transaction:
                    ownerString = "Transaction";
                    break;
            }

            SqlCommand sqlCommand = new SqlCommand("sp_releaseapplock", _Connection);
            sqlCommand.CommandType = CommandType.StoredProcedure;

            sqlCommand.Parameters.AddWithValue("Resource", lockName);
            sqlCommand.Parameters.AddWithValue("LockOwner", ownerString);
            sqlCommand.Parameters.AddWithValue("DbPrincipal", dbPrincipal ?? "public");

            SqlParameter returnValue = sqlCommand.Parameters.Add("ReturnValue", SqlDbType.Int);
            returnValue.Direction = ParameterDirection.ReturnValue;
            sqlCommand.ExecuteNonQuery();

            if (Convert.ToInt32(returnValue.Value) < 0)
            {
                return false;
            }

            return true;
        }
Exemple #4
0
        public override bool GetLock(string lockName, TimeSpan timeout, SqlMutexOwner owner = SqlMutexOwner.Session, string dbPrincipal = null)
        {
            string ownerString = "Session";
            switch (owner)
            {
                case SqlMutexOwner.Transaction:
                    ownerString = "Transaction";
                    break;
            }

            SqlCommand sqlCommand = new SqlCommand("sp_getapplock", _Connection);
            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.CommandTimeout = (int)Math.Ceiling(timeout.TotalSeconds);

            sqlCommand.Parameters.AddWithValue("Resource", lockName);
            sqlCommand.Parameters.AddWithValue("LockOwner", ownerString);
            sqlCommand.Parameters.AddWithValue("LockMode", "Exclusive");
            sqlCommand.Parameters.AddWithValue("LockTimeout", (Int32)timeout.TotalMilliseconds);
            sqlCommand.Parameters.AddWithValue("DbPrincipal", dbPrincipal ?? "public");

            SqlParameter returnValue = sqlCommand.Parameters.Add("ReturnValue", SqlDbType.Int);
            returnValue.Direction = ParameterDirection.ReturnValue;
            sqlCommand.ExecuteNonQuery();

            if (Convert.ToInt32(returnValue.Value) < 0)
            {
                return false;
            }

            return true;
        }
Exemple #5
0
        public override bool ReleaseLock(string lockName, SqlMutexOwner owner = SqlMutexOwner.Session, string dbPrincipal = null)
        {
            object sqlLock = ExecuteScalar(@"SELECT RELEASE_LOCK('" + EscapeString(lockName) + "')");
            if (sqlLock == null ||
                sqlLock == DBNull.Value ||
                (sqlLock is System.Data.SqlTypes.INullable && ((System.Data.SqlTypes.INullable)sqlLock).IsNull) ||
                Convert.ToInt32(sqlLock) != 1)
            {
                return false;
            }

            return true;
        }
Exemple #6
0
        public override bool GetLock(string lockName, TimeSpan timeout, SqlMutexOwner owner = SqlMutexOwner.Session, string dbPrincipal = null)
        {
            object sqlLock = ExecuteScalar(string.Format("SELECT GET_LOCK('{0}', {1})",
                EscapeString(lockName), (timeout == TimeSpan.MaxValue ? "-1" : timeout.TotalSeconds.ToString(CultureInfo.InvariantCulture))));

            if (sqlLock == null || 
                sqlLock == DBNull.Value || 
                (sqlLock is System.Data.SqlTypes.INullable && ((System.Data.SqlTypes.INullable)sqlLock).IsNull) ||
                Convert.ToInt32(sqlLock) != 1)
            {
                return false;
            }

            return true;
        }