0
讓我先發布我的代碼開始:的ExecuteScalar沒有返回正確的價值觀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);
}
}
Execute方法:
: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 [email protected] and [email protected]" +
" 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殼和它總是返回值> 0當我調用合法查詢,必須返回正常值。
第一次通話後進入ExecuteScalar
,從蘭巴符返回returnValue
和例如其16,那麼當它去執行功能,不知何故,返回0,我不明白爲什麼,怎麼把主要的東西,我需要ExecuteScalar
爲將返回count(*)
的值作爲int
。
請檢查c.ExecuteScalar的返回值。如果這不是預期的類型,則返回默認值(T)(在本例中爲default(int)),該值計算爲零(即使SQL語句返回另一個值)。 –
@RalfBönning你可以將這個問題作爲一個答案給出一個你想要說什麼的例子,如果我在'default'或'returnValue'上把'T'改成'int',我必須改變整個類型的方法爲int '爲了工作的方法 –
只要刪除'是T'測試。如果劇組失敗,則應拋出異常......但是,作爲一種特殊情況,你應該沒問題(你沒有得到你期望的類型)。你的數據庫提供者可能會返回一個'short'或者'long'或者'BigInteger',或許它會返回一個包含整數的'float' ......這些都不會是T,例如'int'所以測試失敗並返回整數類型爲零的缺省值(T)。 – pinkfloydx33