Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么ms sql server 2012中的函数返回null?_C#_Sql Server_Database - Fatal编程技术网

C# 为什么ms sql server 2012中的函数返回null?

C# 为什么ms sql server 2012中的函数返回null?,c#,sql-server,database,C#,Sql Server,Database,MS SQL SERVER 2012 EXPRESS中有一个函数,如下所示 CREATE FUNCTION [dbo].[fnCheckClientAppVersion](@Version AS NVARCHAR(15)) RETURNS INT AS BEGIN DECLARE @VRS AS NVARCHAR(15); SET @VRS = (SELECT [Value] FROM Options WHERE [Key] = 'ClientAppVersion');

MS SQL SERVER 2012 EXPRESS中有一个函数,如下所示

CREATE FUNCTION [dbo].[fnCheckClientAppVersion](@Version AS NVARCHAR(15))
RETURNS INT
AS
BEGIN
    DECLARE @VRS AS NVARCHAR(15);
    SET @VRS = (SELECT [Value] FROM Options WHERE [Key] = 'ClientAppVersion');
    IF @Version = @VRS
        RETURN 1;
    RETURN 0;
END
SqlCommand command = new SqlCommand();
command.Connection = Globals.Connection;
command.CommandText = "dbo.fnCheckClientAppVersion";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@Version", "1.0.0.0"));
object o = command.ExecuteScalar();
我试着在我的C代码中调用这个函数,如下所示

CREATE FUNCTION [dbo].[fnCheckClientAppVersion](@Version AS NVARCHAR(15))
RETURNS INT
AS
BEGIN
    DECLARE @VRS AS NVARCHAR(15);
    SET @VRS = (SELECT [Value] FROM Options WHERE [Key] = 'ClientAppVersion');
    IF @Version = @VRS
        RETURN 1;
    RETURN 0;
END
SqlCommand command = new SqlCommand();
command.Connection = Globals.Connection;
command.CommandText = "dbo.fnCheckClientAppVersion";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add(new SqlParameter("@Version", "1.0.0.0"));
object o = command.ExecuteScalar();
但是每次我运行这段代码时,o的值都是null。 为什么?
问题出在哪里?

函数不是存储过程。您可以更改调用语法以使用“SELECT dbo.fnCheckClientAppVersion…”并使用CommandType.Text,或者将函数更改为存储过程,并从结果中读取值。

函数不是存储过程。您可以更改调用语法以使用“SELECT dbo.fnCheckClientAppVersion…”并使用CommandType.Text,或者将函数更改为存储过程,并从结果中读取值。

如建议,您应该将其转换为过程。您还可以大大简化查询。下面是一个示例,说明了这可能是什么样子:

create procedure CheckClientAppVersion
(
    @Version nvarchar(15)
) as
    set nocount on

    SELECT case when [Value] = @Version then 1 else 0 end as VersionMatch
    FROM Options 
    WHERE [Key] = 'ClientAppVersion'
GO

正如建议的那样,你应该把这变成一个过程。您还可以大大简化查询。下面是一个示例,说明了这可能是什么样子:

create procedure CheckClientAppVersion
(
    @Version nvarchar(15)
) as
    set nocount on

    SELECT case when [Value] = @Version then 1 else 0 end as VersionMatch
    FROM Options 
    WHERE [Key] = 'ClientAppVersion'
GO

您可能会发现这很有用您可能会发现这很有用耶-通常您不会直接调用SQL函数,但与另一条SQL语句结合使用:SELECT Version,dbo.fnCheckClientVersionVersion AS ISCLIENTAPVERSION FROM Table 1耶-通常您不会直接调用SQL函数,但与另一条SQL语句结合使用:从表1中选择Version,dbo.fnCheckClientVersionVersion作为IsClientAppVersion