首先让我先发布我的代码:
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
返回。
答案 0 :(得分:2)
你能告诉我们你是如何调用ExecuteScalar的吗?什么类型的T?另外,将断点设置为:var returnValue = c.ExecuteScalar();
并检查跳过该行后返回的类型(F10)。在Visual Studio的监视窗口中,您应该选中Type列。