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&& amp ; returnValue!= DBNull.Value&& returnValue是T)
?(T)returnValue
:default(T);
},parameters);
$ b
执行方法:
$ p $
T执行< T>(字符串sql,CommandType commandType,Func< NpgsqlCommand,T>函数,List< NpgsqlParameter>参数)
{
using(NpgsqlConnection conn = Konekcija_na_server.Spajanje(spoji))
{
using(var cmd = new NpgsqlCommand(sql,conn))
{
cmd.CommandType = commandType;
if(parameters.Count> 0)
{
foreach(参数中的var参数)
{
cmd.Parameters.AddWithValue(parameter.ParameterName,parameter。值);
}
}
返回函数(cmd);
}
}
}
调用ExecuteScalar方法:
komanda =begin; select count(*)from radni_sati where ime = @ ime and prezime = @ prezime+
和(dolazak不为null,odlazak不为null,sati_rada不为null)和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()$ c $因为某些原因,我的
ExecuteScalar
总是返回0作为结果,并且不能成为我测试的结果。
ExecuteScalar
在调用之后,从lamba运算符返回一个 returnValue
,例如它的16,然后当它进入Execute函数时,它返回0,我不明白为什么,因为主要的事情我需要 ExecuteScalar
是为了返回 count(*)
value out一个 int
。你能告诉我们你怎么调用ExecuteScalar ? T是什么类型?此外,将断点设置为: var returnValue = c.ExecuteScalar();
并检查在跳过该行(F10)后返回的类型。在Visual Studio的监视窗口中,您应该检查Type列。
Let me start by posting my code first:
ExecuteScalar method:
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);
}
}
Execute method:
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);
}
}
}
Call of ExecuteScalar method:
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();
Now my problem is when I call ExecuteScalar()
.
For some reason my ExecuteScalar
always returns 0 as result and that can't be coz I tested it as a normal query in PSQL Shell and it always returns values>0 when I call legit query that has to return normal value.
First time It enters ExecuteScalar
after a call, returns a returnValue
from lamba operator and for example its 16, then when it goes to Execute function, somehow it returns 0 and I dont understand why, coz main thing I need ExecuteScalar
for is to return count(*)
value out as an int
.
can you tell us how are you calling ExecuteScalar? What type is T? Also, set breakpoint to: var returnValue = c.ExecuteScalar();
and check what type is returned after you step over that line (F10). In watch window of Visual Studio you should check Type column.
这篇关于ExecuteScalar不能返回正确的值C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!