0

スカラーを返す 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 を実行して戻り値を取得します。

4

3 に答える 3

3

Afunctionは a とは異なりますstored procedure

関数をストアド プロシージャに変換するか、コマンドを次のように変更します。

"select dbo.check_credential(@username, @password)"

CommandType を次のように設定してText使用しますExecuteScalar

Result = Convert.ToInt32(cmd.ExecuteScalar())
于 2012-09-12T08:44:04.307 に答える
1

@PwdRES を出力パラメーターにします。また、コードでパラメータを出力として宣言すると、コマンドが実行されると、関数から返された値が含まれます。

sqlcmd.Parameters.Add("@PwdRES ", SqlDbType.Int)
sqlcmd.Parameters("@PwdRES ").Direction = ParameterDirection.Output)

関数を機能させるには、関数をストアド プロシージャに変換する (または関数を呼び出すストアド プロシージャを追加する) 必要があります。

于 2012-09-12T08:46:45.333 に答える
0

outputその場合、パラメータを定義する必要があります。

SQL 関数では:

@Value int output,   // Define it in the Parameters

このパラメーターで計算された値を取得します

@value = 0

C# コードでは次のようになります。

SqlParameter user = cmd.Parameters.Add("@value", SqlDbType.int);
user.Direction = ParameterDirection.Output;

ここで、ユーザーが0か1かを確認できます

于 2012-09-12T08:45:41.413 に答える