0

ユーザーがシステムで必要とするいくつかの機能にソリューションを適用しようとしています。

ユーザーから、システムにロック システムを実装するように要求されました。サイトへのアクセスを必要とする可能性のある複数のユーザーがいますが、ユーザーは、Web サイトのレコードを個別にロックし、メモを追加してロックを解除し、他のユーザーができるようにしたいと考えています。同じ。

Web ページに単に btnLock という名前のボタンがあり、データベースに LockedBy という名前の列を追加し、次のストアド プロシージャを使用しています...

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

Weekly Classという名前のクラスがあり、次のコードがあります...

   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

butlock の以下のコードは Loggedby フィールドにユーザー名を入力すると考えていましたが、そうではありません。

 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

例として次のステートメントでテストしたように、ストアドプロシージャが機能することを知っています...

EXEC LockWeeklyTest 11, 'Betty' 

btnlock_click と何か関係があると確信していますが、これが何であるかは 100% わかりません。どんな助けでも大歓迎です。

4

2 に答える 2

1

あなたの問題はこの行です:

If lock.LockedBy = "Null" Then

「Null」は、実際には Null という単語を含む文字列です。あなたが求めているのは:

If String.IsNullOrEmpty(lock.LockedBy) Then

そうすれば、実際に null または空の場合、LockedBy が設定されます。現在、LockedBy がすでに文字列値 "Null" に等しい場合にのみ LockedBy を設定していますが、これは宣言された直後には設定されません。WeeklyClass を宣言した直後に LockedBy が常に null になることを考えると、このロジックは本当に必要ですか?

于 2012-07-17T11:17:42.487 に答える
0

AgendaID に問題があるようです。

ボタン クリック イベントの間、値はコメント アウトされていますが、データ レイヤーの「LockWeeklyAgenda」メソッド内のストアド プロシージャに引き続き渡されます。

また、ストアド プロシージャ自体の内部で null 許容パラメーターとして定義されていないため、送信される値は WeeklyClass クラスのコンストラクターに依存します。

また、WeeklyClass コードがどのように見えるかを示していただけますか?

于 2012-07-17T11:39:33.487 に答える