Osman KURT

Yazılım Uzmanı | MVC Eğitmeni

MSSql Bugüne Ait Verileri Çekme

Mssql de tarih işlemleri benim için her zaman sıkıntılı olan işlemler olmuştur. Sql konusunda eminim ki birçok arkadaşımız da bu sıkıntıları yaşıyor. Bu yazım da sizlere ufak ama çok sıkça kullanılacak bir kod parçası vereceğim.

Farz edelimki başlama tarihi olan bir tablomuz olsun ve bizde başlama tarihi bugüne ait olan verileri çekelim. Bu arada alanımızın veri tipi datetime.

Sorgumuz,

Select * from Firmalar where CONVERT(NVARCHAR,BaslamaTarihi,104) = CONVERT(NVARCHAR,GETDATE(),104) 

Görüşmek üzere,

Osman KURT
Yazılım Uzmanı & MVC Eğitmeni

*Sorulan bir soru üzerine yapılmış bir paylaşımdır.

SQL de İki Tabloyu Birbiriyle Merge'leme

Bu yazımda size elinize bulunan 2 tabloyu birbiyle mergeleme (birleştirme) olayından bahsedeceğim. Yalnız aynı olan verileri almamak şartıyla. Örneğin elinizde bir mail listeniz var ve bu mail listenize yeni veriler eklemek istiyorsunuz. Ama var olan listenizde yeni eklenecek olan maillerden var mı bilmek istiyorsunuz ve aynı verileri gereksiz yere saklamak istemiyorsunuz. İşte tamda burada merge olayı devrey giriyor çünkü tek tek kontrol etmeye kalkarsanız ve dolu bir veri listeniz varsa gerçekten bu çile haline gelebilir.

Sql de merge olayı kasıyormu?

Kısa söylemek gerekirse HAYIR. Insert yada update zamanından fazla bir zaman almıyor.

Kullanımı;

İlk olarak ben liste halindeki verilerimi bir adet DataTable'e yazdım. Daha sonra önüne "#" koyarak oluşturduğum temp tabloma DataTablemi kayıt ettiim. Bu arada # işareti koyarak sql'de oluşturduğum temp tablom connection close olduğu anda kendiliğinden kayboluyor haberiniz olsun. Daha sonra merge olayımız devreye giriyor. İstediğimiz koşuluda yazabiliyoruz aynı zamanda.

Benim temp tablomun adı A, asıl kayıt atacağım tablom da MailListesi olsun ve kodumuz alt kısım da mevcut,

 

MERGE MailListesi cm 
USING A ON cm.FirmaID = A.FirmaID and cm.Mail = A.Mail
WHEN NOT MATCHED THEN
       INSERT (FirmaID,Mail)
       VALUES (A.FirmaID,A.Mail);

 

Kısa zaman sonra ufak bir örnek uygulamayıda buaradan paylaşacağım.

Görüşmek üzere

Osman KURT
Yazılım Uzmanı

ASP.Net de Excelden Veri Okuma ve Okunan Veriyi SQL'e Aktarma

Bu yazımda sizlere geçen bir projemde kullanmış olduğum bir kod yapısından bahsedeceğim. Excelden veriyi okumak ve okunan veriyi sql e kod kullanarak kaydetmek.

Öncelikle sayfamıza bir adet gridview ekliyoruz. Daha sonra c# tarafımıza geçerek excelden verilerimizi çekerek gridview içine dolduruyoruz.

 

protected void Page_Load(object sender, EventArgs e)
    {
        GridView1.DataSource = getirTumATSTablo();
        GridView1.DataBind();
    }

    DataTable getirTumATSTablo()
    {
        string dosya_adres = @"D:\osmankurt.xls";
        OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dosya_adres + ";Extended Properties=Excel 8.0");
        baglanti.Open();

        string query = "select * from [Sayfa1$A1:C800] ";
        OleDbDataAdapter oAdp = new OleDbDataAdapter(query, baglanti);
        DataTable dt = new DataTable();
        oAdp.Fill(dt);
        return dt;

    }

 

Şimdi sayfamıza bir adet buton atıyoruz ve butonumuza çift tıklıyoruz. Açılan kod satırımıza alt kısımda ki kodlarımızı yazıyoruz.

 

foreach (GridViewRow row in GridView1.Rows)
        {
            SqlCommand cmd = new SqlCommand("insert into Mail (A,B) values (@A,@B)", baglan.baglanti);
            cmd.Parameters.AddWithValue("@A", row.Cells[0].Text);
            cmd.Parameters.AddWithValue("@B", row.Cells[1].Text);
            if (ConnectionState.Closed == baglan.baglanti.State)
                baglan.baglanti.Open();
            cmd.ExecuteNonQuery();
            baglan.baglanti.Close();
        }

 

Bu kodumuzda yaptığımız işlem gridview içindeki satırları tek tek dolaşarak her satırda yazılı veriyi veritabanımıza kaydetmek. Algoritması son derece basit. Aslında bu işi direk yapan kod bloklarımız var fakat ben böyle bir yöntemle okumaya gittim.

Görüşmek Üzere,

Osman KURT

Yazılım Geliştirici ve Grafiker | Ineta K12 Spekaer

ASP.Net (SQL) de İki Tarih Arasında ki Farkı Bulma

Arkadaşlar bu bilgiyi yaptığım bir projede kullandığım ve önemli bir bilgi olarak gördüğüm için sizlerle paylaşmak istedim. eminim ki yaptığımız projelerin birçoğunda böyle işlemlerle uzun zamanlar boğuşmuşuzdur en azından ben öyle :) Başlıkta asp.net dedim ama aslında ben işi sql kısmında bitirdim, en kolayı bu geldi. Tek saturlık bir kod ile bunu başarabiliyoruz.

Neyse fazla uzatmadan kod kısmına geçiyim isterseniz.

Şimdi veritabanımız da verinin eklenme tarihi var ve bu tarih üzerinden şimdiki tarihe kadar olan farkı bulmayı çalışacağız. Bu sayede kullanıcılara veya verilere istediğimiz işlemleri otomatik olarak uygulatabileceğiz.

Kod kısmımız alt taraftaki gibidir. Bu kod size eklenme tarihinden günümüz tarihine kadar kalan süresi 15 olan kayıtları verir.

SELECT * FROM UYELER WHERE DateDiff( day , EklenmeTarihi,GETDATE())<15 and DateDiff( day , EklenmeTarihi,GETDATE())>0

Kodumuz bu kadar arkadaşlar. Bukodu istediğiniz işlemde kullanabilirsiniz.

Yararlı olması Dileğiyle Görüşmek Üzere

Osman KURT

Yazılım Geliştirici ve Grafiker

SQL Server da Log Dosyasını Temizlemek

Kimi zaman sql performansımız düşer bunun nedenini bilemezsiniz ama neden bellidir. Site trafiğinden dolayı sql log dısyaları inanılmaz bir şekilde şişer ve önce sql i sonra server'ı yormaya başlar. İşte bunu engellemek için belli zamanlar da log dosyalarını temizlemek gerekir. Bu çok basit bir olay ama unutmayın ki her zaman bu işlemden önce bir adet backup dosyamızı alalım ve datbase mizi yedekleyelim.

Şimdi vereceğim kodu new query diyerek sql de çalıştırın ve log dosyanızın boyutunu kontrol edin. Ben denedim 505 MB lık log dosyam 1MB ta düştü ve performans artışı sağlandı.

dump tran databaseninadınıyaz WITH TRUNCATE_ONLY
DBCC SHRINKFILE(2,EMPTYFILE)

Ve Bu kadar sorguyu execute ettiğinzde log dosyanız artık yeni gibi :D

Görüşmek Üzere;

Osman KURT

Yazılım Geliştirici ve Grafiker