Yakındaki Web Seminerleri

Powerpivot ile herkes için iş zekası

"Herkes için İş Zekası" vizyonunun çok önemli bir parçası olan PowerPivot, büyük veri kümelerinde hızlı işleme (çoğunlukla milyonlarca satır), verilerin gelişmiş tümleşmesi ve SharePoint 2010 aracılığıyla çözümlerinizi çaba sarf etmeden paylaşma özelliği gibi çığır açan teknolojiler sağlar. Bellek içi analizde çok başarılı olan PowerPivot’un SQL Server 2012 ile birlikte yeni özelliklere sahip oldu. Yeni versiyonda hiyerarşi, KPI, güvenlik, perspektif, measure tanımlama, data view gibi birçok yenilik sizleri bekliyor. Bu oturumda PowerPivot’un yeni özelliklerini daha yakından tanıma fırsatı bulacaksınız.

  • 6 Mart 2013, Çarşamba
  • 10:00 – 11:00
  • Osman Çokakoğlu

SQL Server 2012 – Filetable Yapısı

Bu oturumda SQL Server 2012 ile birlikte gelen Filetable yapısı işlenecektir. Kurulumu, kullanımı, Filestream ve Filetable arasındaki farklar ve Semantic Search ile kullanımı yine bu oturumda konuşulacak olan konu başlıklarıdır.

  • 17 Nisan 2013, Çarşamba
  • 10:00 – 11:00
  • Yiğit Aktan

SQL Server 2012’de Extended Events

Bu web seminerinde SQL Server 2012’de Extended Events’deki değişiklikleri, Management Studio üzerine eklenen yeni sihirbaz yardımı ile tasarımı, Transact SQL yardımı ile session oluşturulması ve SQL Trace’lerinin Extended Events’e çevrilmesi gibi özellikler üzerinde durulacaktır.

  • 8 Mayıs 2013, Çarşamba
  • 10:00 – 11:00
  • Yiğit Aktan

Silverlight – FileUpload İşlemleri

Sözü fazla uzatmadan, hatta hiç uzatmadan önce sizi Daron Yöndem ‘in ilgili videosunu izlemeye davet ediyorum. DaronYöndem – File Upload

Ardından bu örneği biraz geliştirdim. Birden çok dosya ‘nın karşıya yüklenmesi ve yüklenirken ProgressBar ile yükleme ilerlemesinin takip edilmesini sağlayan. Yükleme işlemlerinde ilgili dosyaların yüklenmesinin başlamadan önce ve karşıya yüklendikten sonra tamamlanmasında, yükleme işleminin öncesinde ve tamamlanmasında ilgili olayların fırlatılmasını sağlayan şekilde kod örneğini biraz daha ileri bir aşamaya götürdüm. Umarım faydalı olur.. Açıklamaları ile beraber kod aşağıdadır..

 

UploadService.asmx
public class UploadService : System.Web.Services.WebService
{
    [WebMethod]
    public long GetFileLength(string fname) {
        // Gelen dosya isimli dosya varsa sunucudan boyutunu d?nd?r?r.
        // Aksi halde "0" d?ner..

        long result = 0;
        string path = Server.MapPath(".") + @"\" + fname;

        if (System.IO.File.Exists(path)) {
            System.IO.FileInfo fInfo = new System.IO.FileInfo(path);
            result = fInfo.Length;
        }

        return result;
    }

    [WebMethod]
    public long SetFileData(byte[] data, string fname) {
        // Verilen datay? ilgilisi dosyaya yazar.
        // Dosya yoksa olu?turur..

        long result = 0;
        string path = Server.MapPath(".") + @"\" + fname;
        MemoryStream ms = new MemoryStream(data);
        FileStream fs = null;

        if (System.IO.File.Exists(path)) {
            fs = System.IO.File.Open(path, FileMode.Append);
        }
        else {
            fs = System.IO.File.Open(path, FileMode.Create);
        }

        ms.WriteTo(fs); // Veriler yaz?l?r..
        result = fs.Length;

        ms.Close();
        ms.Dispose();
        fs.Close();
        fs.Dispose();

        return result;
    }
}

MainPage.xaml
<UserControl x:Class="FileUploadSample.MainPage"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             Height="319"
             Width="293"
             xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">

  <Grid x:Name="LayoutRoot"
        Background="White">
    <Button Content="Start Upload"
            Height="77"
            HorizontalAlignment="Left"
            Margin="55,38,0,0"
            Name="btnUpload"
            VerticalAlignment="Top"
            Width="154" />
    <ProgressBar Height="22"
                 HorizontalAlignment="Left"
                 Margin="12,166,0,0"
                 Name="prgCurrentUpload"
                 VerticalAlignment="Top"
                 Width="251" />
    <TextBlock Height="23"
               HorizontalAlignment="Left"
               Margin="12,137,0,0"
               Name="txtCurrentStatus"
               Text=""
               VerticalAlignment="Top"
               Width="251"
               TextAlignment="Center"
               FontWeight="Bold" />
    <ProgressBar Height="22"
                 HorizontalAlignment="Left"
                 Margin="12,243,0,0"
                 Name="prgGeneralUpload"
                 VerticalAlignment="Top"
                 Width="251" />
    <TextBlock FontWeight="Bold"
               Height="23"
               HorizontalAlignment="Left"
               Margin="12,214,0,0"
               Name="txtGeneralStatus"
               Text=""
               TextAlignment="Center"
               VerticalAlignment="Top"
               Width="251" />
  </Grid>
</UserControl>

MainPage.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;

namespace FileUploadSample
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();

            this.btnUpload.Click += new RoutedEventHandler(btnUpload_Click);
        }

        #region Events

        public event EventHandler PreUploading;          
        // Y?kleme ba?lamadan ?nce f?rlat?l?r.
        public event EventHandler UploadCompleted;       
        // Y?kleme tamamland???nda f?rlat?l?r.
        public event EventHandler<FileInfo> PreFileUploading;      
        // Y?kleme yap?lan her bir dosya ba?lang?c?nda, dosya bilgisi ile f?rlat?l?r.
        public event EventHandler<FileInfo> UploadFileCompleted;   
        // Y?kleme yap?lan her bir dosya tamamland???nda, dosya bilgisi ile f?rlat?l?r.

        #endregion

        #region Private Variables

        private FileStream _FS = null;
        private long _TotalLength = 0;
        private long _CurrentTotalLength = 0;
        private string _FileName = string.Empty;
        private FileInfo _CurrentFileInfo = null;
        private Queue<FileInfo> _FileQueue = null;
        private UploadServiceRef.UploadServiceSoapClient _Client = null;
        
        #endregion

        #region Properties

        /// <summary>
        /// Kuyrukta upload edilmeyi bekleyen dosyalar..
        /// Her bir dosya upload edildik?e kuyruktan ??kar?l?r..
        /// </summary>
        public Queue<FileInfo> FileQueue
        {
            get { return _FileQueue; }
            set { _FileQueue = value; }
        }

        /// <summary>
        /// ?u anki upload edilen dosyay? verir.
        /// </summary>
        public FileInfo CurrentFileInfo
        {
            get { return _CurrentFileInfo; }
            set { _CurrentFileInfo = value; }
        }

        /// <summary>
        /// Upload edilecek t?m dosyalar?n toplam b?yutunu verir.
        /// </summary>
        public long TotalLength
        {
            get { return _TotalLength; }
            set { _TotalLength = value; }
        }

        /// <summary>
        /// ?u an a kadar ki upload edilen dosyalar?n toplam boyutunu verir.
        /// </summary>
        public long CurrentTotalLength
        {
            get { return _CurrentTotalLength; }
            set { _CurrentTotalLength = value; }
        }
        
        #endregion

        #region Private Methods

        /// <summary>
        /// Upload s?ras?nda bekleyen di?er bir dosyaya ge?ilir.
        /// </summary>
        private void JumpToNextFile()
        {
            if (this.FileQueue.Count > 0)
            {
                // Upload edilecek dosya kuyruktan al?n?r.
                FileInfo fInfo = this.FileQueue.Dequeue();
                this._FileName = fInfo.Name;
                this._FS = fInfo.OpenRead();
                this.CurrentFileInfo = fInfo;

                if (this.PreFileUploading != null)
                    this.PreFileUploading(
                        this, new FileInfoEventArgs(this.CurrentFileInfo));

                // Dosya upload i?in g?nderilir.
                this._Client.GetFileLengthAsync(fInfo.Name);
            }
            else
            {
                // E?er kuyruktaki t?m dosyalar y?klendiyse;

                // ?lgili progress kontrol?n?n de?eri 100 yap?l?r. Y?kleme boyutu bilgis g?ncellenir.
                this.prgGeneralUpload.Value = 100;
                this.txtGeneralStatus.Text = this.TotalLength.ToString() +
                    " / " + this.TotalLength.ToString();

                if (this.UploadCompleted != null)
                    this.UploadCompleted(this, null);
            }
        }
        /// <summary>
        /// Upload i?leminde kullan?lacak olan Proxy in?a edilir.
        /// </summary>
        private void InitializeClientInstance()
        {
            this._Client = new UploadServiceRef.UploadServiceSoapClient();

            this._Client.GetFileLengthCompleted +=
                new EventHandler<uploadserv.getfilelengthcompletedeventargs>(Client_GetFileLengthCompleted);
            this._Client.SetFileDataCompleted +=
                new EventHandler<uploadserv.setfiledatacompletedeventargs="">(Client_SetFileDataCompleted);
        }
        
        #endregion

        #region Event Handlers

        private void btnUpload_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Resim Dosyalar?(*.jpg;*.jpeg;*.bmp;*.gif;*.png)|*.jpg;*.jpeg;*.bmp;*.gif;*.png|All Files(*.*)|*.*";
            ofd.Multiselect = true;

            if (ofd.ShowDialog() == true)
            {
                this.TotalLength = 0;
                this.CurrentTotalLength = 0;
                this.FileQueue = new Queue<FileInfo>(ofd.Files.Count());

                // Upload i?leminde kullan?lacak olan servis ?n
                // y?klemesi ve olay tan?mlar? yap?l?r.
                this.InitializeClientInstance();

                // Se?ilen dosyalar kuyru?a at?l?r..
                foreach (FileInfo fi in ofd.Files)
                {
                    this.TotalLength += fi.Length;
                    this.FileQueue.Enqueue(fi);
                }

                if (this.PreUploading != null)
                    this.PreUploading(this, null);

                // Kuyruktan bir dosya okunarak upload i?lemi ba?lat?l?r..
                this.JumpToNextFile();
            }
        }
        private void Client_GetFileLengthCompleted(object sender, UploadServiceRef.GetFileLengthCompletedEventArgs e)
        {
            // Kar?? tarafta ilgili dosya yoksa olu?turulur. (e.Result = 0 d?ner.)
            // Kar?? tarafta ilgili dosya varsa boyutu okunarak kald???
            // konumdan devam edilir. (e.Result = … dosya boyutu d?ner.)
            byte[] data = new byte[10000];
            _FS.Seek(e.Result, SeekOrigin.Begin);   
            // Dosyan?n ilgili konumuna gidilir.
            _FS.Read(data, 0, data.Length);         
            // Yakla??k 10 KB 'l?k veri okunur.

            // Okunan veri sunucu'ya yollan?r.
            this._Client.SetFileDataAsync(data, this._FileName);
        }
        private void Client_SetFileDataCompleted(object sender, UploadServiceRef.SetFileDataCompletedEventArgs e)
        {
            if (e.Result < this._FS.Length)
            {
                this.CurrentTotalLength += 10000;

                // Y?klenmi? dosya boyutu hesaplan?r.
                double uplodedFile = (double)e.Result;
                double totalFile = (double)this._FS.Length;
                double valueFile = (uplodedFile / totalFile) * 100;             
                // Y?klenmi? dosya i?in ProgressBar de?eri hesaplan?r.

                // Y?klenmi? toplam dosyalar boyutu hesaplan?r.
                double currentTotalLength = (double)this.CurrentTotalLength;
                double totalLength = (double)this.TotalLength;
                double valueTotal = (currentTotalLength / totalLength) * 100;   
                // Y?klenmi? dosyalar i?in ProgressBar de?eri hesaplan?r.

                // Y?klenmi? dosya bilgileri ekrana set edilir.
                this.prgCurrentUpload.Value = valueFile;
                this.txtCurrentStatus.Text = e.Result.ToString() + " / " +
                    this._FS.Length.ToString();

                // Y?klenmi? dosyalar?n bilgileri ekrana set edilir.
                this.prgGeneralUpload.Value = valueTotal;
                this.txtGeneralStatus.Text = this.CurrentTotalLength.ToString() +
                    " / " + this.TotalLength.ToString();

                // Dosya sonuna gelinmediyse veri okunarak upload i?lemine devam edilir.
                byte[] data = new byte[10000];
                _FS.Read(data, 0, data.Length);

                this._Client.SetFileDataAsync(data, this._FileName);
            }
            else
            {
                // Dosya y?klemesi tamamland? ise..
                this.prgCurrentUpload.Value = 100;
                this.txtCurrentStatus.Text = this._FS.Length.ToString() +
                    " / " + this._FS.Length.ToString();

                if (this.UploadFileCompleted != null)
                    this.UploadFileCompleted(this, new FileInfoEventArgs(this.CurrentFileInfo));

                // Kuyruktan ba?ka bir dosya al?narak upload i?lemi devam eder.
                this.JumpToNextFile();
            }
        }
        
        #endregion
    }

    public class FileInfoEventArgs : EventArgs
    {
        public FileInfo CurrentFileInfo { get; set; }

        public FileInfoEventArgs(FileInfo _finfo)
            : base()
        {
            this.CurrentFileInfo = _finfo;
        }
    }
}

Proje dosyası ise burada;

http://cid-f2e617aff724ee2b.office.live.com/embedicon.aspx/Makalelerim/FileUploadSample.rar