スカラーを返す sql 関数を作成しました。パスワードが正しい場合は 1、そうでない場合は 0 です。
CREATE FUNCTION check_credential( @User_IN nvarchar(50), @Pwd_IN nvarchar(50))
RETURNS int
AS
BEGIN
DECLARE @PwdRES int
DECLARE @PWD_DB varbinary(255)
IF (@User_IN is not null and @User_IN != '' and @Pwd_IN is not null and @Pwd_IN != '' )
begin
SELECT @PWD_DB = password FROM myTable WHERE username = @User_IN
SET @PwdRES = pwdcompare(@Pwd_IN, @PWD_DB )
end
ELSE
SET @PwdRES = 0
RETURN @PwdRES
END
そして、これは正しく機能します。
SQL関数を呼び出すために次のコードを使用しています:
Dim conn As SqlConnection
Dim sqlcmd As SqlCommand
Dim da As SqlClient.SqlDataAdapter
Dim table As DataTable
Dim Result As Integer
conn = New SqlConnection(ConnectionString)
sqlcmd = New SqlClient.SqlCommand()
sqlcmd.Connection = conn
conn.Open()
sqlcmd.CommandType = CommandType.StoredProcedure
sqlcmd.CommandText = "check_credential"
sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@username", Utilities.NothingToDBNull(user)))
sqlcmd.Parameters.Add(New SqlClient.SqlParameter("@password", Utilities.NothingToDBNull(password)))
この時点で、sqlcmd を実行して戻り値を取得します。