Orhan AKDOĞAN > Visual C# .NET

Visual Studio yu Hızlandırmak için..

Muhtemelen iyi bir bilgisayar kullanıyorsunuz ama yinede visual studio nun yavaşlığı artık canınıza tak etti
ve çözüm aramaya başladınız.Yapılması faydalı olacak işlemleri tek bir listede toplamaya çalıştım.

 

1.Visual Experience seçeneklerinin devredışı bırakılması.

Tools -> Optios -> Environment -> General -> Visual Experience

Speed Visual Studio Options

Speed Visual Studio Options

 

2. Disable “Track Changes”

 

 

3.Disable “Track Active Item in Solution Explorer”

 

 

4.

 

 

C# – Dizin varmı kontrolü

Dizin varmı kontrolü yapılan aşağıdaki method da, belirtilen path deki son dizin yoksa oluşturuluyor.

using System.IO;

        private static bool CheckDirectory(string DirectoryPath)
        {
            try
            {
                int SlashPos = DirectoryPath.Trim().LastIndexOf("\\");
                string strDirectoryname =
                           DirectoryPath.Trim().Substring(0, SlashPos);

                if (false == Directory.Exists(strDirectoryname))
                    Directory.CreateDirectory(strDirectoryname);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
//Kullanım
        private void button1_Click(object sender, EventArgs e)
        {
            if (CheckDirectory(@"C:\Deneme\")==true)
                MessageBox.Show("Dizin Var");
            else
                MessageBox.Show("Dizin yok ve oluşturulamadı.");
        }

DataTable.Select() To DataTable

DataTable üzerinde filtreleme yaptıkdan sonra sonucu yine DataTable olarak değerlendirmek isterseniz;

    public DataTable DTFilter(DataTable dt, string FilterText)
    {
        //Filtre sonuçları DataRow[] olarak değişkene alınıyor.
        DataRow[] results = dt.Select(FilterText);

        //dt nin shema kopyasını kopya_dt ye alıyoruz.
        DataTable kopya_dt = dt.Clone();

        //Filtre sonucunu kopya_dt ye alıyoruz.
        foreach (DataRow dr in results)
            kopya_dt.ImportRow(dr);
        return kopya_dt;
    }

C# – Exchange 2010 Impersonation

Exchange 2010 üzerinden mail atarken Impersonation kullanmak gerekiyorsa, ilk olarak Impersonation Mail adresine Exchange Console dan aşağıdaki komut satırı ile yetki açmalısınız;

ew-ManagementRoleAssignment -Name:_suImpersonateRoleAsg -Role:ApplicationImpersonation -User:'mail@domain.com'

 

Exchange 2010 üzerinden Impersonation kullanarak mail göderimi için servis yapılandırılmasını da aşağıdaki method ile sağlayabilirsiniz.

using Exchange2010;

static ExchangeServiceBinding service = new ExchangeServiceBinding();

    public static void InitMSExchange(string mailadres,string DomainName,string ImperUser,string imperPass, string serviceurl )
    {
        service.RequestServerVersionValue = new RequestServerVersion();
        service.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2010;
        ServicePointManager.ServerCertificateValidationCallback = delegate(Object obj, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
        {
            return true;
        };
        service.EnableDecompression = true;
        service.UseDefaultCredentials = true;
        service.PreAuthenticate = true;
        service.Credentials = new NetworkCredential(ImperUser, imperPass, DomainName);
        service.Url = serviceurl ;
        //Imporsonate
        service.ExchangeImpersonation = new ExchangeImpersonationType()
        {
            ConnectingSID = new ConnectingSIDType()
            {
                ItemElementName = ItemChoiceType.PrimarySmtpAddress,
                Item = mailadres
            }
        };
    }

C# – Active Directory den attribute okuma

Csharp ile Active Directory den herhangi bir bilgiyi okumak için aşağıdaki pratik methodu kullanabilirsiniz;

Aşağıdaki Örnek de, IIS tarafında Windows Authentication şeklinde yapılandırılmış bir asp.net uygulamasında,
sayfayı görüntüleyen user ın mail adresi alınmaktadır.

//"System.DiretoryServices"  .NET Referansı projeye dahil edildikten sonra
using System.DirectoryServices;

 

//Kullanıcının mail adresini alır
string loginusername=
HttpContext.Current.User.Identity.Name.ToString().Replace("DOMAINADI\\","");
string mailadres=
ADdeger("DOMAINADI", loginusername, "mail");

 

public string ADdeger(string DomainName,string accountname,string attribute)
{
    DirectoryEntry entry = new DirectoryEntry("LDAP://"+DomainName);
    DirectorySearcher Dsearch = new DirectorySearcher(entry);
    Dsearch.Filter = "(&(sAMAccountName=" + accountname + "))";
    if(Dsearch.FindAll()[0].Properties.Contains(attribute))
    {return  Dsearch.FindAll()[0].Properties[attribute][0].ToString() ;}
    else {return  string.Empty;}
}

Web Configde System.Web altına

 

satırını eklyerek impersonate kullanmalısınız.

C# – Word-Excel-Images to PDF

Word ve Excel dosyalarını PDF formatına çevirmek için aşağıdaki uygulamayı kullanabilirsininiz.

Derleyebilmeniz için,

Microsoft Save as PDF Add-in for the 2007 Office release

eklentisini kurmanız gerekiyor.

Not: Aşağıdaki kodlar ile; Localhost test de sorun yaşamıyor IIS üzerinden girişte proplem oluyorsa, sistemi aşağıdaki şekilde yapılandırmalısınız.

Çalıştır -> DCOMCNFG -> Companents Service -> My Computer -> DCOM Config -> Microsft Excel Application -> Sağ tık -> Properties -> Identity -> The İneractive User seçilmelidir.
Benzer İşlemin Microsoft Office Word içinde tekrarlanması gerekir.
(Sorun yaşarsanız web config de imporsonate kullanıp user ve pass belirtip  dcom da  Identity tabında da bu kullanıyı belirtirseniz sorun kalmayacaktır.)

 

//Default.aspx.cs
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        string kokdizin = @"D:\Applications\Fax\temp";
        Library.SendFileToClient(Page, Library.DocToPDF(Library.Upload(file1, kokdizin)), "pdf");
    }
}

 

//Library.cs

using System.Collections.Generic;
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Data;
using System.Text;
using Microsoft.Office.Interop.Word;
using Microsoft.Office.Interop.Excel;
using iTextSharp;
using System.Data.OleDb;
using DevExpress.Web.ASPxGridView;

public class Library
{
   public static string DocToPDF(string dosyayolu)
    {
        string pdfyolu = "";
        if (dosyayolu.Contains(".doc"))
        {
            pdfyolu = dosyayolu.Replace("docx", "pdf").Replace("doc", "pdf");
            Library.Word2PDF(dosyayolu, dosyayolu.Replace("docx", "pdf").Replace("doc", "pdf"));
        }
        else if (dosyayolu.Contains(".xls"))
        {
            pdfyolu = dosyayolu.Replace("xlsx", "pdf").Replace("xls", "pdf");
            Library.Excel2PDF(dosyayolu, pdfyolu);
        }
        else if (dosyayolu.Contains(".jpg") || dosyayolu.Contains(".bmp") || dosyayolu.Contains(".png") )
        {
            pdfyolu = dosyayolu.Replace("jpg", "pdf").Replace("bmp", "pdf").Replace("png", "pdf");
            Library.IMAGE2PDF(dosyayolu, pdfyolu);
        }
        return pdfyolu;
    }

   public static void Word2PDF(object Source, object Target)
   {
           object Unknown = Type.Missing;
           object missing = Type.Missing;
           object isVisible = Type.Missing;
           object isReadonly = Type.Missing;
           //Word Uygulaması tanımla
           Microsoft.Office.Interop.Word.ApplicationClass MSdoc=null;
           if (MSdoc == null) MSdoc = new Microsoft.Office.Interop.Word.ApplicationClass();
        try
         {
           MSdoc.Visible = false;
           //Aç
           Microsoft.Office.Interop.Word.Document oDoc = MSdoc.Documents.Open(ref Source, ref isReadonly, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
           ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref isVisible, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
           MSdoc.WindowState = Microsoft.Office.Interop.Word.WdWindowState.wdWindowStateMinimize;
           if (oDoc != null)
           {   //Kaydet
               object format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF;
               oDoc.SaveAs(ref Target, ref format, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown,
               ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown, ref Unknown);
           }
      }
       catch 
       {
            //Çıkış
            MSdoc.Quit(ref Unknown, ref Unknown, ref Unknown);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(MSdoc);
       } 
       finally 
       { 
           //Çıkış
            MSdoc.Quit(ref Unknown, ref Unknown, ref Unknown);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(MSdoc);
       }
   }

   public static void Excel2PDF(string Source, string Target)
   {
       Microsoft.Office.Interop.Excel.ApplicationClass excelApplication = new Microsoft.Office.Interop.Excel.ApplicationClass();
       Workbook excelWorkBook = null;
       //
       string paramSourceBookPath = Source; object paramMissing = Type.Missing;
       //
       string paramExportFilePath = Target;
       XlFixedFormatType paramExportFormat = XlFixedFormatType.xlTypePDF;
       XlFixedFormatQuality paramExportQuality = XlFixedFormatQuality.xlQualityStandard;
       bool paramOpenAfterPublish = false; bool paramIncludeDocProps = true; bool paramIgnorePrintAreas = true;
       object paramFromPage = Type.Missing; object paramToPage = Type.Missing;
       try
       {
           excelWorkBook = excelApplication.Workbooks.Open(paramSourceBookPath,
           paramMissing, paramMissing, paramMissing, paramMissing, paramMissing, paramMissing, paramMissing, paramMissing,
           paramMissing, paramMissing, paramMissing, paramMissing, paramMissing, paramMissing);
           if (excelWorkBook != null) excelWorkBook.ExportAsFixedFormat(paramExportFormat, paramExportFilePath, paramExportQuality,
          paramIncludeDocProps, paramIgnorePrintAreas, paramFromPage, paramToPage, paramOpenAfterPublish, paramMissing);
       }
       catch { }
       finally
       {
           if (excelWorkBook != null) { excelWorkBook.Close(false, paramMissing, paramMissing); excelWorkBook = null; }
           if (excelApplication != null) { excelApplication.Quit(); excelApplication = null; }
           GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); GC.WaitForPendingFinalizers();
       }  
   }

   public static void IMAGE2PDF(string Source, string Target)
   {
       iTextSharp.text.Document document = new iTextSharp.text.Document();
       using (var stream = new FileStream(Target, FileMode.Create, FileAccess.Write, FileShare.None))
       {
           iTextSharp.text.pdf.PdfWriter.GetInstance(document, stream);
           document.Open();
           using (var imageStream = new FileStream(Source, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
           {
               var image = iTextSharp.text.Image.GetInstance(imageStream);
               document.Add(image);
           }
           document.Close();
       }
   }

   public static string Upload(FileUpload gozatadi, string anadizin)
   {
       gozatadi.SaveAs(anadizin + "\\" + Path.GetFileName(gozatadi.FileName));
       return anadizin + "\\"+ Path.GetFileName(gozatadi.FileName);
    }

   public static void SendFileToClient(System.Web.UI.Page sayfa, string path, string tur)
    {
        byte[] content;System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open);
        try
        { content = new byte[fs.Length]; fs.Read(content, 0, content.Length); }  finally   {fs.Close();  }
        sayfa.Response.Clear();sayfa.Response.ClearHeaders(); sayfa.Response.ClearContent();
        sayfa.Response.ContentEncoding = System.Text.Encoding.GetEncoding("ISO-8859-9");
        sayfa.Response.ContentType = "application/" + tur;
        sayfa.Response.Charset = "windows-1254";
        sayfa.Response.AddHeader("Content-Length", content.Length.ToString());
        sayfa.Response.AddHeader("content-disposition", "attachment; filename=\"" + sayfa.Server.UrlPathEncode(System.IO.Path.GetFileName(path)) + "\"");
        sayfa.Response.BinaryWrite(content);
        sayfa.Response.Flush();
        sayfa.Response.End();
    }
}

Web uygulamalarında Türkçe karakter sorunu

Web uygulamalarında, geliştirme yaptığınız bilgisayarınızda türkçe karakterleri düzgün görüyorsanız,
fakat uygulamayı sunucuya publish ettiğinizde türkçe karakterlerde bozulma oluşuyorsa
sorun büyük ihtimalle sunucunun dil ayarlarından kaynaklanıyordur.

Sunucunun dil ayarları ile uğraşmak yerine, web.config dosyasında yapacağınız küçük bir değişiklik ile,
bu sorunun üstesinden gelebilirsiniz.

Yapılması gereken, System.Web node’ u içerisine;

   

tagını eklemek.

C# – Mobil girişleri yönlendirme

 
private static readonly Regex MobileRegex = new Regex(@"(nokia|sonyericsson|blackberry|IPHONE|samsung|sec-|windows ce|motorola|mot-|up.b|midp-)", RegexOptions.IgnoreCase | RegexOptions.Compiled);

public bool IsMobile
{
	get
	{
		HttpRequest r = HttpContext.Current.Request;
		if (r.Browser.IsMobileDevice)
			return true;
		if (!string.IsNullOrEmpty(r.UserAgent) && MobileRegex.IsMatch(r.UserAgent))
			return true;
		return false;
	}
}

protected void Page_Load(object sender, EventArgs e)
{
	if (IsMobile) Response.RedirectPermanent("Mobile.aspx", true);
}


C# – SQL Server Column listesini Datatable olarak alma

    

 
public static DataTable GetDatabaseTableColumns(string sConnection, string sDatabase, string sTableName)
        {
            SqlConnection connection = null;
            DataTable dt = null;

            try
            {
                connection = GetConnection(sConnection, sDatabase);
                if (connection == null)
                    return dt;

                SqlParameter[] sqlParms = new SqlParameter[] { new SqlParameter("@table_name", sTableName) };
                DataSet dset = SqlHelper.ExecuteDataset(connection, "sp_columns", sqlParms);

                if ((dset != null) && (dset.Tables.Count > 0))
                    dt = dset.Tables[0];
            }
            catch (Exception ex)
            {
                throw new Exception("GetDatabaseTableColumns error: " + ex.Message);
            }
            finally
            {
                if (connection != null)
                {
                    connection.Close();
                    connection.Dispose();
                }
            }

            return dt;
        }

C# – SQL Server Table listesini Datatable olarak alma

       public static DataTable GetDatabaseTables(string sConnection, string sDatabase)
        {
            SqlConnection connection = null;
            DataTable dt = null;
            try
            {
                connection = GetConnection(sConnection, sDatabase);
                if (connection == null)
                    return dt;
                SqlCommand cmd = new SqlCommand("sp_tables", connection);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@table_type", "'TABLE'");

                DataSet dset = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dset);
                if ((dset != null) && (dset.Tables.Count > 0))
                    dt = dset.Tables[0];
            }
            catch (Exception ex)
            {
                throw new Exception("GetDatabaseTables error: " + ex.Message);
            }
            finally
            {
                if (connection != null)
                {
                    connection.Close();
                    connection.Dispose();
                }
            }
            return dt;
        }