none
DataGridView Sorgu Sorucunu Log Alma RRS feed

  • Soru

  • Merhabalar,

    Sorgulama sonucu dataGridView'e gelen kayıtların ID'lerini Log almak ve bunları Log Tablomdaki her sorgulama sonucunda başka tabloda bulunan SorgudaGelenID isimli Column'a aralarında , veya - olacak şekilde kaydetmek istiyorum.

    Örneğim:Kişiler tablomda

    ID          İsim            Yer

    1           Ali               Ankara

    2           Veli             Ankara

    3           Ahmet         İstanbul

    Kullanıcı Yere göre sorgulama yaparak Ankara'yı sorguladığında  gelen ID'ler 1 ve 2 yi, başka bir tabloda SorgudaGelenID olarak eklemek istiyorum. Diğer Tablom ID, SorgudaGelenID, SaveUser, SaveDate.

    Log Tablom.

    ID      SorgudaGelenID       SaveUser     SaveDate

    1        1, 2                          Admin          26.10.2015

    Ya da daha mantıklı ne şekilde yapabilirim?

    26 Ekim 2015 Pazartesi 13:08

Yanıtlar

  • Eger yaptigin iste bir mantik oldugunu dusunuyorsan, kod da mantikli olabilir (gerci toplam kismini ben soyle yapardim (ben islemi genel olarak mantiksiz buluyorum):

    private string Topla()
    {
      var idList = new List<int>();
      foreach (DataGridViewRow row in Liste.Rows)
      {
        if (row.Cells["ID"].Value != null)
        { idList.Add(row.Cells["ID"].Value); }
      }
      
     return string.Join(", ", idList);
    }
    
    void DenetimLog()
    {
      try
      {
        Fonksiyonlar.DenetimLog DenetimLog = new Fonksiyonlar.DenetimLog();
        DenetimLog.DosyaID = Topla();
        DenetimLog.SaveDate = DateTime.Now;
        DenetimLog.SaveUser = AnaForm.UserID;
        DB.DenetimLogs.InsertOnSubmit(DenetimLog);
        DB.SubmitChanges();
      }
      catch (Exception e)
      {
        Mesajlar.Hata(e);
      }
    }


    • Yanıt Olarak İşaretleyen Serkan Canseven 2 Kasım 2015 Pazartesi 06:59
    27 Ekim 2015 Salı 15:25
    Yanıtlayıcı

Tüm Yanıtlar

  • sqlBulkCopy ile bu işlemi yapabilirsin. Burada bir örnek var

    yanyana yazma alt alta yaz sonra sql stuff komutu yan yana çekebilirsin.

    takıldığın yerde yardım ederiz.


    kdrgny@outlook.com

    27 Ekim 2015 Salı 06:49
  • Merhabalar,

    Sorgulama sonucu dataGridView'e gelen kayıtların ID'lerini Log almak ve bunları Log Tablomdaki her sorgulama sonucunda başka tabloda bulunan SorgudaGelenID isimli Column'a aralarında , veya - olacak şekilde kaydetmek istiyorum.

    Örneğim:Kişiler tablomda

    ID          İsim            Yer

    1           Ali               Ankara

    2           Veli             Ankara

    3           Ahmet         İstanbul

    Kullanıcı Yere göre sorgulama yaparak Ankara'yı sorguladığında  gelen ID'ler 1 ve 2 yi, başka bir tabloda SorgudaGelenID olarak eklemek istiyorum. Diğer Tablom ID, SorgudaGelenID, SaveUser, SaveDate.

    Log Tablom.

    ID      SorgudaGelenID       SaveUser     SaveDate

    1        1, 2                          Admin          26.10.2015

    Ya da daha mantıklı ne şekilde yapabilirim?

    Sorgulamayı nasıl yaptığınızı bilmiyorum o yüzden entity framework üzerinden örnek vereceğim.

    var users = dbContext.Users.Where(p=>p.City == "Ankara").ToList();
    
    var selectedIds = string.Join(",",users.Select(s=>s.ID));
    
    dbContext.Logs.Add(new Log(){SorgudaGelenID = selectedIds, SaveUser = 1, SaveDate = DateTime.Now});
    
    dbContext.SaveChanges();


    oguzkurtcuoglu.com


    27 Ekim 2015 Salı 07:16
  • Database seviyesinde halletmen gereken bir seyin pesindesin. Kullandigin database her ne ise onunla ilgili "Audit" arastir.

    Not: Diyelim ki bunu dil seviyesinde halletmen gerekiyordu ve hallettin. Elinde soyle bir log var:

    ID      SorgudaGelenID       SaveUser     SaveDate

    1        1, 2                          Admin          26.10.2015

    2         2,3                          Admin          27.10.2015

    Bunun sana ne faydasi olacak, onu da iyice dusun.

    27 Ekim 2015 Salı 09:00
    Yanıtlayıcı
  • Ya ben ne zaman log yapsam hep trigger ile yapıyordum hiç kimse trigger dememiş. Yanlış mı yapıyorum.
    27 Ekim 2015 Salı 09:37
  • Yo yanlis yapmiyorsun da, halihazirda "audit" varken trigger'a gerek yok. Bir de DML triggerlar insert, update, delete icin select icin hic trigger aklima gelmedi (var mi onu da bilmiyorum).
    27 Ekim 2015 Salı 10:02
    Yanıtlayıcı
  • Select'te zaten ne olabilir ki, birisi görmemesi gereken bir şeyi gördü mü diye kontrol etmek yerine onun görmemesini sağlamak daha mantıklı değil mi?

    Audit'te kullandığım oluyor da genelde trigger ile alışmışım, birde ben belli sayıda değişiklikten sonra backup'ta atıyorum hazır yazmıştım bir ara sürekli onu kullanıyorum.

    27 Ekim 2015 Salı 10:17
  • Yok mantik degil de zaten ornekte "Admin" bile var. Gormemesi gereken bir sey degil herhalde ama bunun ne faydasi var, onu bilmeden biz sadece fikir yurutuyoruz kendimizce :) Her selectin bir de (bence gereksiz) inserte yol acacagi dusunulunce, oldukca yavas bir sistem olacaktir.
    27 Ekim 2015 Salı 10:49
    Yanıtlayıcı
  • Bu şekilde kodum ama mantıklı mı bilemiyorum.

    void Topla()
            {            
                foreach (DataGridViewRow row in Liste.Rows)
                {
                    if (row.Cells["ID"].Value != null)
                    { toplam += row.Cells["ID"].Value + ", ";  }
                }            
            }
    
            void DenetimLog()
            {
                Topla();
                try
                {
                    Fonksiyonlar.DenetimLog DenetimLog = new Fonksiyonlar.DenetimLog();
                    DenetimLog.DosyaID = toplam;
                    DenetimLog.SaveDate = DateTime.Now;
                    DenetimLog.SaveUser = AnaForm.UserID;
                    DB.DenetimLogs.InsertOnSubmit(DenetimLog);
                    DB.SubmitChanges();
                }
                catch (Exception e)
                {
                    Mesajlar.Hata(e);
                }
            }

    27 Ekim 2015 Salı 14:04
  • Eger yaptigin iste bir mantik oldugunu dusunuyorsan, kod da mantikli olabilir (gerci toplam kismini ben soyle yapardim (ben islemi genel olarak mantiksiz buluyorum):

    private string Topla()
    {
      var idList = new List<int>();
      foreach (DataGridViewRow row in Liste.Rows)
      {
        if (row.Cells["ID"].Value != null)
        { idList.Add(row.Cells["ID"].Value); }
      }
      
     return string.Join(", ", idList);
    }
    
    void DenetimLog()
    {
      try
      {
        Fonksiyonlar.DenetimLog DenetimLog = new Fonksiyonlar.DenetimLog();
        DenetimLog.DosyaID = Topla();
        DenetimLog.SaveDate = DateTime.Now;
        DenetimLog.SaveUser = AnaForm.UserID;
        DB.DenetimLogs.InsertOnSubmit(DenetimLog);
        DB.SubmitChanges();
      }
      catch (Exception e)
      {
        Mesajlar.Hata(e);
      }
    }


    • Yanıt Olarak İşaretleyen Serkan Canseven 2 Kasım 2015 Pazartesi 06:59
    27 Ekim 2015 Salı 15:25
    Yanıtlayıcı
  • Bu işteki asıl amacım kullanıcının sorgulama sonucunda yapması gereken işleri yapıp yapmadığını kontrol etmek. Örneğin sorgunun sonucunda 10 kayıt geliyor ise bunun sonucunda 10 tane form üretiyor program, yani yapılacak 10 iş var demek ancak kullanıcı bu işlerden kaç tanesini yerine getirdi onları takip etmek istiyorum. Sorgu sonucu 10 iş çıksa da 2 işin evrakını çöpe atar 8 iş yapabilir. Bunu takip etmek istiyorum. O sorgu sonucunda kaç kayıt geldiğini takip etmek istiyorum.
    27 Ekim 2015 Salı 19:58