이것은 내 저장 프로 시저 가이 질문에 대한 후속 조치 입니다.
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'Check_Previous_Passwords')
BEGIN
PRINT 'Dropping Procedure Check_Previous_Passwords'
DROP Procedure Check_Previous_Passwords
END
GO
PRINT 'Creating Procedure Check_Previous_Passwords'
GO
CREATE Procedure Check_Previous_Passwords
@ua_pk uniqueidentifier,
@IncomingPassword varchar(25)
AS
DECLARE @Temp VARCHAR(25)
DECLARE @IsSamePassword bit
SET @Temp = (SELECT TOP 1 up_Password
FROM User_Passwords
WHERE ua_fk = @ua_pk
ORDER BY up_PasswordDate DESC)
IF (EXISTS (SELECT 1
FROM User_Passwords up
WHERE up.ua_fk = @ua_pk
AND @IncomingPassword = up.up_Password))
BEGIN
SELECT @IsSamePassword = 1
END
ELSE
BEGIN
SELECT @IsSamePassword = 0
END
GO
GRANT EXEC ON Check_Previous_Passwords TO WEB
GO
연결된 SQL이 값을 반환하고 있다고 확신합니다. 하지만 VB.Net 솔루션으로 가져 와서 사용하면 "표현식이 값을 생성하지 않는다"는 메시지가 표시됩니다. 내 VB 코드는 다음과 같습니다.
버튼 클릭시 :
If user_.Check_Previous_Passwords(user_) = True Then
'throw error and set ResetPassword to true
End If
User.vb에서
Public Sub Check_Previous_Passwords(ByVal User As FoundationLibrary.User)
Dim IsSamePassword_ As Integer
Dim objCommand As New SqlCommand("Check_Previous_Passwords", DatabaseInterface_.Connection)
objCommand.CommandType = CommandType.StoredProcedure
objCommand.Parameters.AddWithValue("@ua_pk", ua_pk_)
objCommand.Parameters.AddWithValue("@IncomingPassword", ua_Password_)
DatabaseInterface_.Open()
IsSamePassword_ = objCommand.ExecuteScalar
DatabaseInterface_.Close()
If IsSamePassword_ = 1 Then
User.ua_ResetPassword_ = True
Else
User.ua_ResetPassword_ = False
End If
End Sub
나는 사용한 Dim IsSamePassword As Boolean
다음 내 If
진술을 동일하게 변경했습니다 True
. 여전히 같은 오류가 발생합니다.
이 느낌이 정말 쉽습니다.
SQL은 필요한 것보다 더 복잡합니다.
CREATE Procedure Check_Previous_Passwords
@ua_pk uniqueidentifier,
@IncomingPassword varchar(25)
AS
SELECT COUNT(*)
FROM User_Passwords up
WHERE up.ua_fk = @ua_pk
AND @IncomingPassword = up.up_Password
그리고 그것을 사용하는 VB는 값을 반환 할 수 있도록 함수 여야합니다.
Option Strict On
' ...'
Public Function Check_Previous_Passwords(ByVal User As FoundationLibrary.User) As Boolean
Dim isSamePassword As Integer
Dim objCommand As New SqlCommand("Check_Previous_Passwords", DatabaseInterface_.Connection)
objCommand.CommandType = CommandType.StoredProcedure
objCommand.Parameters.Add(New SqlParameter With {.ParameterName"@ua_pk", .SqlDbType = SqlDbType.UniqueIdentifier, .Value = ua_pk_})
objCommand.Parameters.Add(New SqlParameter With {.ParameterName = "@IncomingPassword", .SqlDbType = SqlDbType.VarChar, .Size = 25, .Value = ua_Password_})
DatabaseInterface_.Open()
isSamePassword = CInt(objCommand.ExecuteScalar)
DatabaseInterface_.Close()
User.ua_ResetPassword_ = (isSamePassword = 1)
Return User.ua_ResetPassword_
End Function
AddWithValue
부품을 안정적으로 작동하는 버전으로 변경했습니다 . 피해야합니다 AddWithValue
-결국 불행을 가져올뿐입니다. 이미 AddWithValue () 사용을 중단 할 수 있습니까?
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다