ExecuteScalar 不返回正确的值 C#

ExecuteScalar not returning right values C#

让我首先发布我的代码:

ExecuteScalar 方法:

public T ExecuteScalar<T>(string sql, CommandType commandType, List<NpgsqlParameter> parameters)
{
    using (NpgsqlConnection conn = Konekcija_na_server.Spajanje("spoji")) 
    {
        return Execute<T>(sql, commandType, c =>
        {
            var returnValue = c.ExecuteScalar();
            return (returnValue != null && returnValue != DBNull.Value && returnValue is T)
             ? (T)returnValue 
             : default(T); 
        }, parameters);

    }        
}

执行方法:

 T Execute<T>(string sql, CommandType commandType, Func<NpgsqlCommand, T> function, List<NpgsqlParameter> parameters)
    {
        using (NpgsqlConnection conn = Konekcija_na_server.Spajanje("spoji")) 
        {
            using (var cmd = new NpgsqlCommand(sql, conn))
            {
                cmd.CommandType = commandType;
                if (parameters.Count > 0 ) 
                {
                    foreach (var parameter in parameters) 
                    {
                        cmd.Parameters.AddWithValue(parameter.ParameterName,parameter.Value);
                    }
                }
                return function(cmd);
            }

        }

    }

调用 ExecuteScalar 方法:

komanda = "begin;select count(*) from radni_sati where ime=@ime and prezime=@prezime" +
                      " and (dolazak is not null and odlazak is not null and sati_rada is not null) and napomena='' ;commit;";
            listaParametara.Add(new NpgsqlParameter { ParameterName = "@ime", Value = ime });
            listaParametara.Add(new NpgsqlParameter { ParameterName = "@prezime", Value = prezime });
            var nePrazni_redovi=instanca.ExecuteScalar<int>(komanda, CommandType.Text, listaParametara); 
            listaParametara.Clear();

现在我的问题是当我调用 ExecuteScalar().

出于某种原因,我的 ExecuteScalar 结果总是 returns 0,这不可能是因为我在 PSQL Shell 中将它作为普通查询进行了测试,它总是 [=当我调用必须 return 正常值的合法查询时,34=]s 值>0。

第一次它在调用后进入ExecuteScalar,return是来自lamba运算符的returnValue,例如它的16,然后当它进入执行函数时,不知何故它returns 0 我不明白为什么,因为我需要 ExecuteScalar 的主要目的是将 return count(*) 值作为 int.

你能告诉我们你是如何调用 ExecuteScalar 的吗? T是什么类型?此外,将断点设置为:var returnValue = c.ExecuteScalar(); 并检查跨过该行 (F10) 后返回的类型。在 Visual Studio 的手表 window 中,您应该检查类型列。