![](/img/trans.png)
[英]C# + SQL Server ExecuteScalar() not returning last inserted id
[英]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
總是返回0作為結果,這不能證明我在PSQL Shell中將其作為普通查詢進行了測試,當我調用必須返回正常值的合法查詢時,它始終返回value> 0。
第一次它在調用后進入ExecuteScalar
,從lamba運算符返回returnValue
,例如它的16,然后當它轉到Execute函數時,以某種方式返回0,我不明白為什么,我需要ExecuteScalar
主要目的是返回count(*)
值int
。
您能告訴我們如何致電ExecuteScalar嗎? T是什么類型? 另外,將斷點設置為: var returnValue = c.ExecuteScalar();
並檢查在跨過該行(F10)后返回的類型。 在Visual Studio的監視窗口中,應檢查“類型”列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.