sql函数有两个参数。从VB .NET调用

时间:2012-09-12 08:39:38

标签: sql vb.net function ado.net

我写了一个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并获取返回值。

3 个答案:

答案 0 :(得分:3)

functionstored procedure

不同

将您的函数转换为存储过程或将命令更改为

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

将CommandType设置为Text并使用ExecuteScalar

Result = Convert.ToInt32(cmd.ExecuteScalar())

答案 1 :(得分:1)

使@PwdRES为output参数。还要在代码中将参数声明为输出,然后在命令执行后它将包含函数返回的值:

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

您需要将您的函数转换为存储过程(或添加调用该函数的存储过程)以使其工作我认为。

答案 2 :(得分: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