ExecuteScalar没有返回正确的值C#

时间:2017-10-08 09:29:30

标签: c# function lambda executescalar

首先让我先发布我的代码:

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总是返回0作为结果,并且不能因为我在PSQL Shell中将其作为普通查询进行测试,并且当我调用具有的合法查询时它总是返回值> 0返回正常值。

第一次调用后进入ExecuteScalar,从lamba运算符返回returnValue,例如16,然后当它转到Execute函数时,它以某种方式返回0,我不明白为什么,我需要ExecuteScalar的主要内容是将count(*)值作为int返回。

1 个答案:

答案 0 :(得分:2)

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