Forum

C# Veritabanında bu...
 
Bildirimler
Hepsini Temizle

C# Veritabanında bulunan Saatleri Toplama işlemi yaptırmak

5 Yazılar
2 Üyeler
0 Likes
3,190 Görüntüleme
(@sertacunal)
Gönderiler: 63
Estimable Member
Konu başlatıcı
 

Merhaba;

Sql Veritabanında 01:47:00.0000000 şeklinde saat değeri tutmaktayım. Bu değerleri datagridview üzerinde Saat ismiyle listeliyorum.

Örn;

 1'inci Saat Değeri = 01:47:00.0000000

 2'nci Saat Değeri  = 23:00:00.0000000 

datagridview üzerinden verileri 01:47:00 ve 23:00:00 türünde alıyorum fakat toplama işlemini yapamıyorum. bu iki değeri topladığımda 24:47:00 şeklinde olması gerekiyor

 

 fakat bir türlü yapamadım.

 

Yardımlarınız için teşekkür ederim.

 
Gönderildi : 06/03/2015 20:03

(@eravse)
Gönderiler: 1753
Üye
 

Hocam TimeSpan kullanın 

  var date1 = new TimeSpan(0,1,47,00,0000000);

            var date2 =new TimeSpan(0,23,00,00,0000000);

            var s1 = date1.Hours+ date2.Hours; 

iki saat arasındakı toplamı bu sekılde alabıırsınız saniyeleride siztoplayabilirsiniz bunu bir methoda yazıp daha güzel bir hale getirebilirsiniz.

Saygılarımla

 

ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com

 
Gönderildi : 06/03/2015 20:22

(@sertacunal)
Gönderiler: 63
Estimable Member
Konu başlatıcı
 

Hocam TimeSpan kullanın 

  var date1 = new TimeSpan(0,1,47,00,0000000);

            var date2 =new TimeSpan(0,23,00,00,0000000);

            var s1 = date1.Hours+ date2.Hours; 

iki saat arasındakı toplamı bu sekılde alabıırsınız saniyeleride siztoplayabilirsiniz bunu bir methoda yazıp daha güzel bir hale getirebilirsiniz.

Saygılarımla

 

 

Erdem Hocam Öncelikle İlginiz ve Cevabınız için teşekkür ederim.

Benim saat sayılarım sabit olmadığı için direk olarak 

var date1 = new TimeSpan(0,1,47,00,0000000);

var date2 =new TimeSpan(0,23,00,00,0000000);

 

yazamıyorum. Bunları datagridview'den almam gerekiyor. Bunun için

  for (int i = 0; i < ds.Tables["İseGirisCikis"].Rows.Count; i++)
            {

var date1 =new TimeSpan(0,Convert.ToDateTime(ds.Tables["İseGirisCikis"].Rows[i]["CALISMASAATI"]).ToString("HH"),00,00,0000000);

 }

olarak almaya çalıştığımda hata veriyor. Ayrıca  ;

 

 

saatler1 = Convert.ToInt32(Convert.ToDateTime(ds.Tables["İseGirisCikis"].Rows[i]["CALISMASAATI"]).ToString("HH"));
                dakika1 = Convert.ToInt32(Convert.ToDateTime(ds.Tables["İseGirisCikis"].Rows[i]["CALISMASAATI"]).ToString("mm"));
                var date1 = new TimeSpan(0, saatler1, dakika1, 00, 0000000);

 

bu şekilde yapayım dedim odada Timespan değerini atayamazsınız diye hata verdi. 

 

 

Saygılarımla;

 

 

 
Gönderildi : 07/03/2015 15:04

(@sertacunal)
Gönderiler: 63
Estimable Member
Konu başlatıcı
 

Erdem Bey Merhaba;

Cevabınız ve yardımlarınız için tekrardan teşekkür ederim. Ben sorunumu çözdüm nasıl çözdüğümüde paylaşmak istedim ki benim gibi bir problem yaşayan arkadaşımız olursa böylece çözmüş olur.

 

cmd = new SqlCommand("select sum(DATEPART(HOUR, [CALISMASAATI])) as 'Saat', sum(DATEPART(MINUTE, [CALISMASAATI])) as 'DAKIKA' from İseGirisCikis", con);

// sum(DATEPART(HOUR, [CALISMASAATI])) as 'Saat' bu kısım bize sadece saatleri toplayıp getiriyor.

//  sum(DATEPART(MINUTE, [CALISMASAATI])) as 'DAKIKA' bu kısımda sadece dakikaları toplayıp getiriyor.

                 dr = cmd.ExecuteReader();

//burda if sorgusunda hem saati hemde dakikayı sorguluyorum ki aşağıda convert yaptığımda null değer gelip problem yaşamayalım diye.

                if (dr.Read() && dr[0].ToString() != "" && dr[1].ToString() != "")
                {

//saat değişkene alınıyor.

                   int saat = Convert.ToInt32(dr[0].ToString());

//dakika değişkene alınıyor.

                    int dakika = Convert.ToInt32(dr[1].ToString());

/for döngüsündede dakika 60'dan büyükse dön denildiğinde haliyle 60'ncı dakikada dahi dönüp dakikayı 60 dk düşürüp saate 1 saat ekliyor.
                    for (int i = 0; dakika > 60; i++)
                    {
                        dakika = dakika - 60;
                        saat = saat + 1;
                    }

//burdada eğer saat ve tarih tek hece ise yani saat 01 ise bunu 1 olarak getirdiğinden uzunluğunu kontrol edip önüne 0 ekledik, Aynı şeyi dakika içinde yaptık ve böylece saati ve dakikayı toplamış oldum.

                    if (saat.ToString().Length.ToString() == "1" && dakika.ToString().Length.ToString() == "1")
                    {
                        toplam_txt.Text = "0" + saat + ":0" + dakika;
                    }
                    else if (saat.ToString().Length.ToString() == "1")
                    {
                        toplam_txt.Text = "0"+saat + ":" + dakika;
                    }
                    else if (dakika.ToString().Length.ToString() == "1")
                    {
                        toplam_txt.Text = saat + ":0" + dakika;
                    }
                    else
                    {
                        toplam_txt.Text = saat + ":" + dakika;
                    }
                    
                }
                else
                {
                    toplam_txt.Text = null;
                }

con.close();

 
Gönderildi : 07/03/2015 17:54

(@eravse)
Gönderiler: 1753
Üye
 

Çok teşekkür ederim tabi yazılım kısmını siz yaptığınız için şu koda göre benim cevabımın sizi tatmin etmemesi normal. Daha farklı birşey istemişsiniz siz ama halledilmesi ve geri bildirim alınması çok güzel. 

 

Teşekkürler

Saygılarımla 

ProfectSoft Yazılım ve Danışmanlık Hizmetleri
LogPusher & Bifyou E-Commerce System
www.profectsoft.com

 
Gönderildi : 09/03/2015 00:47

Paylaş: