如何从标量值函数

时间:2017-06-07 14:29:38

标签: c# windows tsql

每次执行代码时,我都会从方法

中获得“false”
 public bool exists(int vpisna, string geslo)
    {
        bool a = false;
        Uspeh = true;


        cmd = new SqlCommand("SELECT dbo.fnExists(@Vpisna,@Geslo)", povezava);
        cmd.Parameters.AddWithValue("@Vpisna", vpisna);

        cmd.Parameters.AddWithValue("@Geslo", geslo);

        try
        {
            povezava.Open();
          int result =(int)cmd.ExecuteScalar();


            if (result==1)
            {
                a = true;     
            }
        }
        catch (Exception e)
        {
            ex = e;
        }
        finally
        {
            povezava.Close();
        }

        return a;
    }

我的标量值函数:

[dbo].[fnExists](
    @Vpisna int,
    @Geslo nvarchar(40)
)
RETURNS INT AS BEGIN

DECLARE @a int

SET @a = (
    SELECT
        COUNT(*)
    FROM
        Student
    WHERE
        ID = @Vpisna
        AND
        Geslo = CONVERT( nvarchar(40), HashBytes('SHA1', @Geslo ), 2 )
)  

RETURN @a
END

每次我得到一个错误的结果,即使我试图操纵标量值函数内的数据。当我在没有函数的情况下在真实数据上尝试SELECT语句时,它在SQL Management Studio中运行。

2 个答案:

答案 0 :(得分:1)

[dbo].[fnExists](
@Vpisna int,
@Geslo nvarchar(40)
)
RETURNS INT AS BEGIN
DECLARE @a int
SELECT
    @a = COUNT(*)
FROM
    Student
WHERE
    ID = @Vpisna
    AND
    Geslo = CONVERT( nvarchar(40), HashBytes('SHA1', @Geslo ), 2 )
RETURN @a
END

答案 1 :(得分:1)

我认为你的代码系列是错误的。在创建sql命令之前必须打开sql连接或必须从sqlcommand打开。 使用它;

        SqlConnection cnn = new SqlConnection("sql-connection-string");
        cnn.Open();
        SqlCommand cmd = new SqlCommand("select 1", cnn);

        SqlConnection cnn = new SqlConnection("sql-connection-string");
        SqlCommand cmd = new SqlCommand("select 1", cnn);
        cmd.Connection.Open();