如何从标量值函数中正确地返回count(*)值

每次执行我的代码,我都会从方法中获得“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中工作的函数时。

我认为你的代码系列是错误的。 在创建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(); 
 [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