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 中,您应该检查类型列。
让我首先发布我的代码:
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 中,您应该检查类型列。