Search code examples
asp.net.netvb.netasp.net-controls

.Net: code for BtnLock_Click


I have been trying to apply a solution to some functionality that a user requires on their system.

A user requires me to implement a locking system on their system. They have multiple users which may require to access the site, but the user would like the ability for them to independently lock a records in the web site site, for them to add notes to and to then unlock this so other users are able to do the same.

I have a button on my web page simply named btnLock and i have added an additional column in my database called LockedBy and have the following stored procedure...

ALTER PROCEDURE LockWeeklyTest
(     
   @AgendaID BIGINT,     
   @LockingUser VARCHAR(20) 
) 
AS
BEGIN    
    SET NOCOUNT ON      
    UPDATE        
        WeeklyAgenda     
    SET        
        LockedBy = @LockingUser 
    WHERE
        AgendaID = @AgendaID    
    AND 
        LockedBy IS NULL      
END

I have a class named Weekly Class and have the following code...

   Public Shared Sub LockWeeklyAgenda(ByVal WeeklyClass As WeeklyClass)

    Using dbConnection As New SqlConnection(ConfigurationManager.AppSettings("dbConnection"))
        dbConnection.Open()

        Dim dbTrans As SqlTransaction
        dbTrans = dbConnection.BeginTransaction()

        Using dbCommand As SqlCommand = dbConnection.CreateCommand

            With dbCommand
                .Transaction = dbTrans
                .CommandType = CommandType.StoredProcedure
                .CommandText = "LockWeeklyTest"

                'Add Parameters for Update
                .Parameters.AddWithValue("@AgendaID", WeeklyClass.AgendaID)
                .Parameters.AddWithValue("@LockingUser", WeeklyClass.LockedBy)


                dbCommand.ExecuteNonQuery()

            End With
        End Using 'dbCommand
        dbTrans.Commit()
    End Using

End Sub

I was thinking that the below code for the butlock would populate my Loggedby field with the username but this isnt the case.

 Protected Sub btnLock_Click(sender As Object, e As System.EventArgs) Handles btnLock.Click


    Dim lock As New WeeklyClass
    If lock.LockedBy = "Null" Then
        lock.LockedBy = System.Environment.UserName
        'lock.AgendaID = AgendaID
    End If

    ' save to the database using the Class DAL
    WeeklyClassDAL.LockWeeklyAgenda(lock)


End Sub

I know that the Stored Procedure works as i have tested with the following statement as an example...

EXEC LockWeeklyTest 11, 'Betty' 

Im sure that its something to do with the btnlock_click, but im not 100% sure what this is. Any help is much appriechiated.


Solution

  • Your problem is this line:

    If lock.LockedBy = "Null" Then
    

    "Null" is actually a string containing the word Null. What you're after is:

    If String.IsNullOrEmpty(lock.LockedBy) Then
    

    That way, if it is actually null or empty, your LockedBy will be set. Currently, it's only setting the LockedBy if LockedBy already equals the string value "Null", which it won't directly after being declared. Is this logic really necessary considering LockedBy will always be null directly after you've declared the WeeklyClass?