簡體   English   中英

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總是返回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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM