BAĞLANTILARIM

Takip Edin:

0

SQL SERVER'DA JOB (ZAMANLANMIŞ GÖREV) OLUŞTURMA

Perşembe, Ağustos 03, 2017 / /



http://blog.tameryigit.com/2017/08/sql-stored-procedure-ve-cursor-kullanimi.html bağlantıda oluşturduğumuz Stored Procedure'ü, Sql Server'ın Job özelliğini kullanarak günde 1 kez otomatik çalıştırmak istedik.

Bunun için öncelikle Microsoft SQL Server Management Studio'da SQL Server Agent'ı aktif ettik.

Jobs bölümünden New Job diyerek Job tanımlama ekranını doldurduk.



Steps bölümünde yapılacak işleri, Schedules bölümünde ise bu işlerin hangi zamanlarda yapılacağını tanımladık.




Örnekte tanımladığımız Job, her gece saat 01:00'da EXEC TeklifOlustur komutunu yani prosedürümüzü çalıştırıyor.

0

SQL STORED PROCEDURE ve CURSOR KULLANIMI

Perşembe, Ağustos 03, 2017 / /



Aşağıdaki örnekte TeklifOlustur adında bir prosedür oluşturduk.

Prosedürün yapacağı iş, birkaç tablodan UNION ALL ile birleştirilerek alınmış sorgu sonucunu stored procedure içinde tanımlanmış @TABLO adında bir tabloya yazmak.

Daha sonra kursor adıyla tanımlanmış CURSOR vasıtasıyla bu tablo üzerinde satır satır dolaşarak SELECT, SUM gibi çeşitli işlemler yaptıktan sonra bulduğu bilgileri TEKLIF tablosuna eklemek.

USE [BOSFOR_WEB_YONETIM_FIDE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE procedure [dbo].[TeklifOlustur]
AS

DECLARE @ILKTARIH NVARCHAR(100) = GETDATE() --güncel zaman
DECLARE @SONTARIH NVARCHAR(100) = DATEADD(yy,10,GETDATE()) --güncel zamana 10 yıl ekledik
 --procedure içinde kürsörde kullanmak üzere bir tablo tanımlıyoruz
DECLARE @TABLO TABLE
(
 FIRMA NVARCHAR(50),
 SIPARISNO NVARCHAR(50),
 EKIMNO NVARCHAR(50),
 FIDEADI NVARCHAR(250),
 VARYANT NVARCHAR(50),
 SEEDITEMREF NVARCHAR(50),
 TOHUMADI NVARCHAR(250),
 PLANLANANEKIMTARIHI NVARCHAR(50),
 TESLIMTARIHI NVARCHAR(50),
 SIPARISMIKTARI NVARCHAR(50),
 PLNMIKTAR INT,
 EKILENMIKTAR NVARCHAR(50),
 BEKLEYENMIKTAR NVARCHAR(50),
 TEKLIFMIKTARI NVARCHAR(50),
      KALANGUN NVARCHAR(250)
)
INSERT @TABLO
   
SELECT TMP2.*
FROM (
SELECT
TMP.*
,KALANGUN=(SELECT DATEDIFF(day, GETDATE(), PLANLANANEKIMTARIHI))
FROM (
SELECT * FROM FITAP.[dbo].[FF_220_TOHUMBILGI](@SONTARIH,@ILKTARIH)
UNION ALL
SELECT * FROM FITAP.[dbo].[FF_230_TOHUMBILGI](@SONTARIH,@ILKTARIH)
UNION ALL
SELECT * FROM FITAP.[dbo].[FF_240_TOHUMBILGI](@SONTARIH,@ILKTARIH)
UNION ALL
SELECT * FROM FITAP.[dbo].[FF_250_TOHUMBILGI](@SONTARIH,@ILKTARIH)
UNION ALL
SELECT * FROM FITAP.[dbo].[FF_260_TOHUMBILGI](@SONTARIH,@ILKTARIH)
UNION ALL
SELECT * FROM FITAP.[dbo].[FF_270_TOHUMBILGI](@SONTARIH,@ILKTARIH)
) AS TMP
) AS TMP2
WHERE TOHUMADI IS NOT NULL
AND KALANGUN<=5
ORDER BY PLANLANANEKIMTARIHI

SELECT * FROM @TABLO

--CURSOR BAŞLIYOR
DECLARE @TOHUMAD NVARCHAR(250)
DECLARE @PLANLANANMIKTAR INT

DECLARE kursor CURSOR FOR
--TABLOYU GRUPLANDIRARAK ALDIK
SELECT TOHUMADI FROM @TABLO GROUP BY TOHUMADI
OPEN kursor
FETCH NEXT FROM kursor
INTO @TOHUMAD
WHILE @@FETCH_STATUS = 0
BEGIN

  --Burada TOHUMADI'na göre filtreleme yap ve PLNMIKTAR alanlarındaki veriyi toplayıp @PLANLANANMIKTAR değişkenine at
  --TOHUM ADINA GÖRE BAK
  SELECT @PLANLANANMIKTAR=SUM(PLNMIKTAR) FROM @TABLO WHERE TOHUMADI=@TOHUMAD
 
 --KAYIT EKLE
 INSERT INTO TEKLIF (TohumAd,KayitTarihi,Miktar) VALUES (@TOHUMAD,(SELECT GETDATE()),@PLANLANANMIKTAR)

FETCH NEXT FROM kursor INTO @TOHUMAD
END
CLOSE kursor
DEALLOCATE kursor

Bu prosedür otomatik olarak belirli aralıklarla çalışsın istenirse Sql Server'da Job oluşturulabilir.
http://blog.tameryigit.com/2017/08/sql-serverda-job-zamanlanmis-gorev.html

0

C# İLE OFFICE365 ÜZERİNDEN MAIL GÖNDERMEK

Cumartesi, Temmuz 29, 2017 / / , ,


C# ile Office365 üzerinden mail gönderebilmek için öncelikle aşağıdaki bağlantıdan Microsoft Exchange Web Services Managed API'ı indirdik. Kurulumu yaptıktan sonra Visual Studio'dan projemizin Reference bölümünden gerekli .dll dosyalarını ekledik. Bulunduğu yol C:\Program Files\Microsoft\Exchange\Web Services\2.2\

İndirme bağlantısı : https://www.microsoft.com/en-us/download/details.aspx?id=42951


Aşağıdaki namespace gerekiyor.

using Microsoft.Exchange.WebServices.Data;


Mail gönderimini yapacak Exchange kodlarımız

    public static void ExchangeUzerinden(string mailBaslik, string mailIcerik, string aliciPosta)
    {
        EmailAddress alacakAdres = new EmailAddress(aliciPosta);
        string strsubject = mailBaslik;
        string strbody = mailIcerik;
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013_SP1);
        service.Credentials = new WebCredentials("test@bosforbilisim.com.tr", "123abcd");
        //bunu kullanmaktaki amaç service.URL bilgisini otomatik almak fakat beklettiği için aşağıdaki şekilde manuel olarak tanımladık.
        //service.AutodiscoverUrl("tamer@bosforbilisim.com.tr", RedirectionUrlValidationCallback);
        service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
        EmailMessage message = new EmailMessage(service);
        message.Subject = strsubject;
        message.Body = strbody;
        message.ToRecipients.Add(alacakAdres);
        message.Save();
        message.SendAndSaveCopy();
    }


    private static bool RedirectionUrlValidationCallback(string redirectionUrl)
    {
        bool result = false;
        Uri redirectionUri = new Uri(redirectionUrl);
        if (redirectionUri.Scheme == "https")
        {
            result = true;
        }
        return result;
    }


Gönder :

        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                MailGonder.ExchangeUzerinden("Başlık", "Mesaj içeriği", "tmryigit@gmail.com");
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

1

Asp.net ile kolay ProgressBar yapımı

Perşembe, Haziran 29, 2017 / / , , ,



Bir işlemin yüzde kaçının tamamlandığını gösteren dinamik bir progressbar yapıyoruz. Bu işlem Jquery kullanmadan, sayfada sadece 1 adet UpdatePanel ve 1 Adet Timer kontrolü yardımıyla aşağıdaki şekilde yapılabilir.

Butona basıldıktan sonra Timer devreye girsin istedik. Bu yüzden tasarım tarafında Timer kontrolünün Enable özelliğini "false" olarak belirledik. Saniyede bir kez çalışması için Interval özelliğini "1000" olarak ayarladık.

Tasarım tarafı

<asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
                    <asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick" Enabled="false"></asp:Timer>
                    <div style="width:100%; height:28px; border:1px solid #aaa; padding:1px;">
                    <asp:Literal ID="ltrBar" runat="server"></asp:Literal>
                    </div>
                        <br />
                    <asp:Literal ID="ltrYuzde" runat="server"></asp:Literal>
                    <br />
                    <br />
                    <br />
                    <div style="text-align: center;">
                        <asp:LinkButton ID="linkGonder" runat="server" CssClass="buton yesil" Style="padding: 15px 50px; font-size: 17px;" OnClick="linkGonder_Click"><i class="fa fa-paper-plane"></i> Gönder</asp:LinkButton>
                    </div>
                </ContentTemplate>
            </asp:UpdatePanel>


Kod tarafı


        static int listeElemanSiraNo;
        static List<string> listeMailAdres = new List<string>(); //mail adreslerin olduğu liste
   protected void linkGonder_Click(object sender, EventArgs e)
        {
            listeElemanSiraNo = 0;
            linkGonder.Enabled = false;
            Timer1.Enabled = true;
        }


        protected void MailIslem(int mailAdresNo)
        {
            try
            {
                if (listeMailAdres.Count > 0)
                {
                    string gonderilecekEpostaAdresi = listeMailAdres[mailAdresNo];
                    ////mailgönderimini burada yap
                    listeElemanSiraNo = mailAdresNo + 1;
                    double toplamDeger = listeMailAdres.Count;
                    double bulunanDeger = listeElemanSiraNo;
                    int tamamlananYuzde = (int)Math.Round((double)(100 * bulunanDeger) / toplamDeger);
                    ltrBar.Text = "<div style=\"background-color:#ccc; height:28px; width:" + tamamlananYuzde + "%;\"></div>";
                    ltrYuzde.Text = "%" + tamamlananYuzde.ToString();
                }
            }
            catch (Exception ex)
            {
                lblIslemSonuc.Text = ex.Message;
                lblIslemSonuc.CssClass = "islemHatali";
                lblIslemSonuc.Visible = true;
            }
        }
        protected void Timer1_Tick(object sender, EventArgs e)
        {
            //saniyede bir kez çalış, sıradaki mail adresine mail gönder.
            if (listeElemanSiraNo < listeMailAdres.Count)
            {
                MailIslem(listeElemanSiraNo);
            }
            else
            {
                Timer1.Enabled = false;
                linkGonder.Enabled = true;
            }
        }




0

SQL'de VARBINARY tipinde tutulan ziplenmiş dosyayı indirme

Cuma, Şubat 24, 2017 / / , , ,

protected void DosyaIslem(string islemYapilacakDosyaId)
        {
            try
            {
                VeriMsSQL.Islem islem = new VeriMsSQL.Islem();
                DataTable dt = islem.DosyaBilgi(islemYapilacakDosyaId);
                if (dt.Rows.Count > 0)
                {
                    DataRow dr = dt.Rows[0];
                    string dosya = dr["Dosya"].ToString();
                    string dosyaAd = dr["DosyaAd"].ToString();
                    byte[] bytes = (byte[])dr["Dosya"];
                    Response.Clear();
                    Response.AddHeader("content-disposition", "attachment;filename=" + dosyaAd + ".zip");
                    Response.ContentType = "application/zip";
                    Response.BinaryWrite(bytes);
                    Response.End();
                }
                dt.Dispose();
            }
            catch (Exception ex)
            {
                lblIslemSonuc.Text = ex.Message;
                lblIslemSonuc.CssClass = "islemHatali";
                lblIslemSonuc.Visible = true;
            }
        }

C#'ta dosyayı zip'e çevirme ve ziplenmiş dosyayı varbinary tipinde sql de tutma 

0

C#'ta dosyayı zip'e çevirme ve ziplenmiş dosyayı VARBINARY tipinde sql de tutma

Cuma, Şubat 24, 2017 / / , , ,

C# ile bir dosyayı .zip formatına çevirmek için çeşitli dll dosyayları bulunmakta. Buradaki örnekte Ionic DotNetZip kullanıldı. https://dotnetzip.codeplex.com/

   protected void DosyaYukleSql()
        {
            try
            {
                Guid guId = Guid.NewGuid();
                string dosyaAd = System.IO.Path.GetFileName(fileDosya.FileName);
                string dosyaUzanti = System.IO.Path.GetExtension(dosyaAd);
                dosya = guId + dosyaUzanti;  //dosya adını Guid ile belirledik              
                    using (ZipFile zip = new ZipFile())
                    {
                        zip.AddEntry(dosya, fileDosya.PostedFile.InputStream);
                        zip.Save(Server.MapPath("/upload/zip/") + guId + ".zip");
                        //zipi binary yap
                        byte[] byteZip = File.ReadAllBytes(Server.MapPath("/upload/zip/") + guId + ".zip");
//veritabanına ekle
                        VeriMsSQL.Islem islem = new VeriMsSQL.Islem();
                        islem.DosyaEkle(guId.ToString(), byteZip, kayitId: dosyaKayitId);
                    }
                    File.Delete(Server.MapPath("/upload/zip/") + guId + ".zip"); //klasördeki zipli dosyayı sil
            }
            catch (Exception ex)
            {
                lblIslemSonuc.Text = ex.Message;
                lblIslemSonuc.CssClass = "islemHatali";
                lblIslemSonuc.Visible = true;
            }
        }



SQL'de varbinary tipinde tutulan ziplenmiş dosyayı indirme

0

Html elemanları, Asp.net Kontrolü olarak kullanmak

Cumartesi, Aralık 17, 2016 / / ,

Asp.net ile web siteleri geliştirirken bazı durumlarda Asp.net kontrolü yerine ona karşılık gelen Html elemanını kullanmak esneklik sağlayabilir.

Asp.net kontrolleri arasında yer alan LinkButton, Html içinde <a> elemanına dönüşüyorsa,
Asp.net kontrolleri arasında yer alan Panel, Html içinde <div> elemanına dönüşüyorsa,
Bu durumda tasarım tarafında kullanılmış bir Panel kontrolüne kod tarafında
panelDeneme.Attributes.Add(“style”,”display:none;”); şeklinde bir özellik atayabiliriz. Bu ne işe yarar?
Örneğin Asp.net kontrollerinin Visible.false özelliğine bağlı kalmadan Javascript ile göster-gizle yapmak istediğimiz durumlarda yukarıdaki kod işimizi çözmüş olur. Çünkü kontrollerin visible.false özelliği, yapmak istediğimizle birebir aynı sonucu vermemekte. Visible.false verilen kontrol Html kaynağında üretilmemiş oluyor. Bizim istediğimiz ise Html kaynakta bulunan bir elemanın tarayıcıda gizli olması ya da tam tersi görünüyorken gizlenmesi.

Tersten gidecek olursak:

Sayfaya Html olarak yazılan
<a href=”Deneme.aspx”>Deneme</a> elemanını,
<a id=”linkMenu” runat=”server” href='<%#Eval("SayfaUrl") %>'><%#Eval("SayfaAd") %></a> şeklinde değiştirerek (yani runat=”server” ve bir id tanımı ekleyerek) Kod tarafında bir Asp.net kontrolü gibi kullanabiliriz. Burada yapmak istediğim linkMenu isimli <a> elemanını Asp.net Repeater kontrolü içinde kullanmak ve kullanıcı tarafından tıklanan menünün seçili olmasını(stilinin değişmesini) sağlamak.

Asp.net Repeater kontrolünün OnItemDataBound olayı içinden <a> elemanımıza erişelim.

protected void repeatMenu_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            try
            {            
                    HtmlAnchor linkMenu = e.Item.FindControl("linkMenu") as HtmlAnchor; //eriştik
          }
            catch (Exception)
            {
            }
        }

Kullanıcının tıkladığı sayfa açıldığında ilgili <a> elemanını seçili yapalım.

protected void repeatMenu_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            try
            {
             string  menuSayfaId = DataBinder.Eval(e.Item.DataItem, "SayfaId").ToString();
string cagrilanSayfaId = SayfaBilgi(cagrilanSayfaUrl); //çağrılan sayfaUrl sinden Id bilgisi bulundu varsaydık.
                //seçileni aktif yap
                if (cagrilanSayfaId == menuSayfaId)
                {
                    HtmlAnchor linkMenu = e.Item.FindControl("linkMenu") as HtmlAnchor;
                    linkMenu.Attributes.Add("style", "color: #e06c5f; background-color: #eeeff3;");
                }
            }
            catch (Exception)
            {
            }
        }

Hangi Html elemanın Asp.net’te nasıl çağrılacağı ile ilgili (burada <a> elemanı HtmlAnchor şeklinde çağrıldı) tutorialspoint.com adresinde bulduğum içerik şu şekilde;

Control NameHTML tag
HtmlHead<head>element
HtmlInputButton<input type=button|submit|reset>
HtmlInputCheckbox<input type=checkbox>
HtmlInputFile<input type = file>
HtmlInputHidden<input type = hidden>
HtmlInputImage<input type = image>
HtmlInputPassword<input type = password>
HtmlInputRadioButton<input type = radio>
HtmlInputReset<input type = reset>
HtmlText<input type = text|password>
HtmlImage<img> element
HtmlLink<link> element
HtmlAnchor<a> element
HtmlButton<button> element
HtmlForm<form> element
HtmlTable<table> element
HtmlTableCell<td> and <th>
HtmlTableRow<tr> element
HtmlTitle<title> element
HtmlSelect<select> element
HtmlGenericControlAll HTML controls not listed

SON YORUMLAR