انجمن وب سایت مشاوره در زمینه پروژه های برنامه نویسی و طراحی وب سایتهای تجاری
نکته های مفید و حرفه ای در سی شارپ C# - نسخه‌ی قابل چاپ

+- انجمن وب سایت مشاوره در زمینه پروژه های برنامه نویسی و طراحی وب سایتهای تجاری (http://forum.a00b.com)
+-- انجمن: سوالها و مقاله های آموزشی (/forumdisplay.php?fid=1)
+--- انجمن: مقاله های آموزشی (/forumdisplay.php?fid=3)
+--- موضوع: نکته های مفید و حرفه ای در سی شارپ C# (/showthread.php?tid=26)

صفحه‌ها: 1 2 3


نکته های مفید و حرفه ای در سی شارپ C# - ali - 07-28-2014 01:55 PM

نکته اول: ایجاد دیتا تیبل و مقدار دهی اولیه به آن Datatable

کد:
DataTable dt1 = new DataTable(); // ایجاد شی از کلاس
dt1.Columns.Add("RowID", typeof(int)); // تعریف ستون
dt1.Columns.Add("StrDate", typeof(int)); // تعریف ستون
for (int i = 0; i < 100; i++) // حلقه تکرار 100 تایی
            {
                dt1.Rows.Add(new Object[] { i, i + 5 }); // درج مقدار
            }



یک کلاس برای انجام عملیات بر روی پایگاه داده - ali - 07-28-2014 02:03 PM

این کلاس در زمانی کاربرد دارد که در فایل Web.config برای پروژه Connection String تعریف شده باشد.

کد:
using System;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Data;
using System.Data.Linq;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Globalization;

/// <summary>
/// یک کلاس مفید برای کار با پایگاه داده
/// </summary>
public class FirstClass
{
    SqlConnection con;
    public SqlCommand cmd;
    DataTable dt;
    SqlDataAdapter da;

    public FirstClass()
    {
        con = new SqlConnection(ConfigurationManager.ConnectionStrings["WebSiteConnectionString"].ConnectionString);
        cmd = new SqlCommand();
        dt = new DataTable();
        cmd.Connection = con;
        da = new SqlDataAdapter(cmd);
    }

    public DataTable dbSelect(string sql)
    {
        DataTable dttt = new DataTable();
        try
        {
            cmd.CommandText = sql;
            con.Open();
            da.Fill(dt);
            con.Close();
            return dt;
        }
        catch
        {
            con.Close();
            return dttt;
        }
        finally
        {
            con.Close();
        }
    }

    public void exeSp(string spName)
    {
        con.Open();

        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = spName;
        cmd.ExecuteNonQuery();
        con.Close();

    }

    public void exeSqlCmd(string sql)
    {
        try
        {
            cmd.CommandText = sql;
            con.Open();
            cmd.ExecuteNonQuery();
        }
        catch { }
        finally
        {
            con.Close();
        }
    }
}



دو متد برای برای بدست آوردن تاریخ شمسی - ali - 07-28-2014 02:05 PM

متد اول تاریخ جاری میلادی سیستم را به تاریخ شمسی تبدیل می نماید و متد دوم تاریخ میلادی را از ورودی دریافت می نماید.

کد:
public string dtShamsi()
    {
        string strMydate;
        PersianCalendar calFar1 = new PersianCalendar();
        strMydate = calFar1.GetYear(DateTime.Now).ToString() + "/" + calFar1.GetMonth(DateTime.Now).ToString("00") + "/" + calFar1.GetDayOfMonth(DateTime.Now).ToString("00");
        return strMydate;
    }

    public String dtShamsi2(DateTime MiladiDate)
    {
        String dtShamsi = "";
        PersianCalendar calFar1 = new PersianCalendar();
        dtShamsi = calFar1.GetYear(MiladiDate).ToString() + "/" + calFar1.GetMonth(MiladiDate).ToString("00") + "/" + calFar1.GetDayOfMonth(MiladiDate).ToString("00");
        return dtShamsi;
    }



متد ارسال ایمیل در سی شارپ و asp.net - ali - 07-28-2014 02:11 PM

از این متد برای ارسال ایمیل در سی شارپ C# استفاده می شود. در این روش از SMTP استفاده شده است:
کد:
public void UDF_Authenticate(String Str_EmailTo)
        {
            //create the mail message
            MailMessage mail = new MailMessage();
            String Str_PassWord = GetUniqueKey(5);
            //set the addresses
            mail.From = new MailAddress("info@a00b.com");
            mail.To.Add(Str_EmailTo.Trim());

            //set the content
            mail.Subject = "Password Information";
            mail.Body = "<div style=\"direction: ltr;\"><span style=\"font-size: large;\"><u><em><strong>&nbsp;Your New PassWord:</u> " + Str_PassWord.Trim() + " </strong></em></span></div><div style=\"direction: ltr;\"><a href=\"http://www.a00b.com\"><span style=\"font-size: large;\"><u><em><strong>www.a00b.com</strong></em></u></span></a></div>";
            mail.IsBodyHtml = true;
            //send the message
            SmtpClient smtp = new SmtpClient("mail.a00b.com");
            smtp.Port = 25;

            //to authenticate we set the username and password properites on the SmtpClient
            smtp.Credentials = new NetworkCredential("info@a00b.com", "**********"); // در این محل اطلاعات کاربری ایمیل قرار می گیرد
            smtp.Send(mail);
        }

        private String GetUniqueKey(int maxSize)
        {
            char[] chars = new char[62];
            chars =
            "ABCDEFGHJKLMNPQRSTUVWXYZ123456789".ToCharArray();
            byte[] data = new byte[1];
            RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();
            crypto.GetNonZeroBytes(data);
            data = new byte[maxSize];
            crypto.GetNonZeroBytes(data);
            StringBuilder result = new StringBuilder(maxSize);
            foreach (byte b in data)
            {
                result.Append(chars[b % (chars.Length)]);
            }
            return result.ToString();
        }

و این هم یک متد دیگه که کمی کاملتره:

کد:
try
{

   SmtpClient mySmtpClient = new SmtpClient("my.smtp.exampleserver.net");

    // set smtp-client with basicAuthentication
    mySmtpClient.UseDefaultCredentials = false;
   System.Net.NetworkCredential basicAuthenticationInfo = new
      System.Net.NetworkCredential("username", "password");
   mySmtpClient.Credentials = basicAuthenticationInfo;

   // add from,to mailaddresses
   MailAddress from = new MailAddress("test@example.com", "TestFromName");
   MailAddress to = new MailAddress("test2@example.com", "TestToName");
   MailMessage myMail = new System.Net.Mail.MailMessage(from, to);

   // add ReplyTo
   MailAddress replyto = new MailAddress("reply@example.com");
   myMail.ReplyTo = replyto;

   // set subject and encoding
   myMail.Subject = "Test message";
   myMail.SubjectEncoding = System.Text.Encoding.UTF8;

   // set body-message and encoding
   myMail.Body = "<b>Test Mail</b><br>using <b>HTML</b>.";
   myMail.BodyEncoding = System.Text.Encoding.UTF8;
   // text or html
   myMail.IsBodyHtml = true;

   mySmtpClient.Send(myMail);
}

catch (SmtpException ex)
{
  throw new ApplicationException
    ("SmtpException has occured: " + ex.Message);
}
catch (Exception ex)
{
   throw ex;
}



متد تبدیل تاریخ شمسی به میلادی در سی شارپ C# - ali - 08-24-2014 10:53 AM

کد:
/// <summary>
    /// متد تبدیل تاریخ شمسی به میلادی
    /// قالب تاریخ ورودی یک رشته 12 کاراکتری می باشد
    /// 1300/01/01 مثال
    /// </summary>
    /// <param name="ShamsiDate"></param>
    /// <returns></returns>
    public DateTime ShamsiToMiladi(String ShamsiDate)
    {
        DateTime MyMilDate;
        String p1, p2, p3;
        p1 = ShamsiDate.Substring(0, 4);
        p2 = ShamsiDate.Substring(5, 2);
        p3 = ShamsiDate.Substring(8, 2);
        PersianCalendar pers = new PersianCalendar();
        MyMilDate = pers.ToDateTime(int.Parse(p1), int.Parse(p2), int.Parse(p3), 0, 0, 0, 0);
        dtMiladi = MyMilDate;
        return MyMilDate;
    }



متد تشخیص سال کبیسه در سی شارپ C# - ali - 08-24-2014 10:56 AM

کد:
/// <summary>
    /// متد تشخیص سال کبیه در سی شارپ
    /// خروجی عدد صفر نمایانگر سال کبیسه می باشد
    /// </summary>
    /// <param name="shamsiYaer"></param>
    /// <returns></returns>
    private int isKabiseh(String shamsiYaer)
    {
        int isKabise = 0;
        if ((int.Parse(shamsiYaer) + 1) % 100 == 0 && (int.Parse(shamsiYaer) + 1) % 400 == 0)
        {
            isKabise = 0;
        }
        else if ((int.Parse(shamsiYaer) + 1) % 100 != 0 && (int.Parse(shamsiYaer) + 1) % 4 == 0)
        {
            isKabise = 0;
        }
        else
        {
            isKabise = 1;
        }
        return isKabise;
    }



بدست آوردن مقدار value member و display member در combobox داخل Datagridview - ali - 12-10-2014 02:16 PM

برای این منظور از قطعه کد زیر استفاده می نمائیم:

کد:
for (int i = 0; i < Grd_RelationFields.Rows.Count; i++)
            {
                try
                {
                    String Str_SelectedText = Convert.ToString((Grd_RelationFields.Rows[i].Cells["Column3"] as DataGridViewComboBoxCell).FormattedValue.ToString());
                    String Str_SelectedText2 = Convert.ToString((Grd_RelationFields.Rows[i].Cells["Column3"] as DataGridViewComboBoxCell).Value.ToString());
                    String Str_SelectedText3 = Convert.ToString((Grd_RelationFields.Rows[i].Cells["Column3"] as DataGridViewComboBoxCell).Items.Count.ToString());
                    //int int_SelectedVal = Convert.ToInt32(Grd_RelationFields.Rows[i].Cells["Column3"].Value);
                    MessageBox.Show(Str_SelectedText + " - " + Str_SelectedText2 + " - " + Str_SelectedText3);
                }
                catch
                { }
            }



متدهای پر کربرد در مورد عکس در سی شارپ - ali - 12-26-2014 06:07 AM

متد تبدیل بایت به ایمیج Byte TO Image
کد:
/// <summary>
/// متد تبدیل آرایه ای از بایتها به ایمیج
/// </summary>
/// <param name="Byt_ArrayIn"></param>
/// <returns></returns>
public static Image UDF_ByteArrayToImage(byte[] Byt_ArrayIn)
{
       return Image.FromStream(new MemoryStream(Byt_ArrayIn));
}

متد تبدیل عکس یا فایل به بایت Picture to Byte or File To Byte
کد:
/// <summary>
/// متد تبدیل عکس به بایت
/// </summary>
/// <param name="Str_ImageLocation"></param>
/// <returns></returns>
private static Byte[] UDF_ConvertImageToByte(String Str_ImageLocation)
{
    return System.IO.File.ReadAllBytes(Str_ImageLocation);
}

متد تبدیل ایمیج به بایت Image To Byte
کد:
/// <summary>
/// متد تبدیل ایمیج به بایت
/// </summary>
/// <param name="img"></param>
/// <returns></returns>
public static byte[] UDF_ImageToByte2(Image img)
{
     ImageConverter converter = new ImageConverter();
    return (byte[])converter.ConvertTo(img, typeof(byte[]));
}

یک متد نسبتا بهتر برای خواندن فایل و تبدیل به بایت File To Byte
کد:
public static byte[] UDF_ImageToByte(String filePath)
        {
            byte[] buffer;
            FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            try
            {
                int length = (int)fileStream.Length;  // get file length
                buffer = new byte[length];            // create buffer
                int count;                            // actual number of bytes read
                int sum = 0;                          // total number of bytes read

                // read until Read method returns 0 (end of the stream has been reached)
                while ((count = fileStream.Read(buffer, sum, length - sum)) > 0)
                    sum += count;  // sum is a buffer offset for next reading
            }
            finally
            {
                fileStream.Close();
            }
            return buffer;
        }

متدی پر کاربرد که عکس را به صورت بایت دریافت می نماید و آن را به عکس بند انگشتی و یا عکسی با اندازه دلخواه که اندازه به صورت پارامتر ورودی داده می شود تبدیل می نماید.

کد:
public static Bitmap CreateThumbnail(byte[] byteArrayIn, int lnWidth, int lnHeight)
        {
            MemoryStream ms = new MemoryStream(byteArrayIn);
            Image returnImage = Image.FromStream(ms);
            System.Drawing.Bitmap bmpOut = null;
            try
            {
                Bitmap loBMP = new Bitmap(returnImage);
                ImageFormat loFormat = loBMP.RawFormat;
                decimal lnRatio;
                int lnNewWidth = 0;
                int lnNewHeight = 0;

                //*** If the image is smaller than a thumbnail just return it
                if (loBMP.Width < lnWidth && loBMP.Height < lnHeight)
                    return loBMP;

                if (loBMP.Width > loBMP.Height)
                {
                    lnRatio = (decimal)lnWidth / loBMP.Width;
                    lnNewWidth = lnWidth;
                    decimal lnTemp = loBMP.Height * lnRatio;
                    lnNewHeight = (int)lnTemp;
                }
                else
                {
                    lnRatio = (decimal)lnHeight / loBMP.Height;
                    lnNewHeight = lnHeight;
                    decimal lnTemp = loBMP.Width * lnRatio;
                    lnNewWidth = (int)lnTemp;
                }
                bmpOut = new Bitmap(lnNewWidth, lnNewHeight);
                Graphics g = Graphics.FromImage(bmpOut);
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                //g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
                g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                g.FillRectangle(Brushes.White, 0, 0, lnNewWidth, lnNewHeight);
                g.DrawImage(loBMP, 0, 0, lnNewWidth, lnNewHeight);

                loBMP.Dispose();
            }
            catch
            {
                return null;
            }

            return bmpOut;
        }



بدست آوردن مقدار موجود در یک سلول دیتا گرید ویو - ali - 12-26-2014 06:09 AM

کد:
private void Dg_BgPics_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            String Str_SelectedID = Dg_BgPics.Rows[Dg_BgPics.CurrentRow.Index].Cells[0].Value.ToString();
        }



دو متد بسیار جالب برای کدگذاری و کد کشای متن در سی شارپ - ali - 12-28-2014 08:37 AM

برای راحتی کار شما کل کلاس رو همیجا گذاشتم که شامل دو متد برای کد گذاری و کدگشایی TEXT می باشد. مقدار فیلد Str_TempKey در هر دو متد باید یکسان باشد. ضمنا شما میتوانید مقدار کلید را (Str_TempKey) به عنوان پارامتر ورودی به متد بدهید و از این کلاس می توانید برای کد گذاری و رمزگذاری تمامی متنها استفاده نمایید. مخصوصا کلمه های عبور. با کمی تغییر در این متد می توانید حتی فایلهای خود را نیز کد گذاری نمایید:

کد:
using System;
using System.Security.Cryptography;
using System.Text;

namespace LibraryMembers.Classes
{
    class Class_EncDecToolStripAcc
    {
        /// کلاس کد گذاری و کد گشایی کد سی آر سی جعبه ابزار
        /// <summary>tblToolStripsItems
        /// Encrypt the given string using the specified key.
        /// </summary>
        /// <param name="Str_ToEncrypt">The string to be encrypted.</param>
        /// <param name="strKey">The encryption key.</param>
        /// <returns>The encrypted string.</returns>
        public static string UDF_Encrypt(string Str_ToEncrypt)
        {
            try
            {
                using (TripleDESCryptoServiceProvider objDESCrypto = new TripleDESCryptoServiceProvider())
                {
                    MD5CryptoServiceProvider objHashMD5 = new MD5CryptoServiceProvider();
                    byte[] byteHash;
                    byte[] byteBuff;
                    String Str_TempKey = @"Aj@#C$7LTool$tripAcc)+_)%$@!#hgFj";
                    byteHash = objHashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(Str_TempKey));
                    objHashMD5 = null;
                    objDESCrypto.Key = byteHash;
                    objDESCrypto.Mode = CipherMode.ECB;//CBC, CFB
                    byteBuff = ASCIIEncoding.ASCII.GetBytes(Str_ToEncrypt);
                    return Convert.ToBase64String(objDESCrypto.CreateEncryptor().TransformFinalBlock(byteBu​ff, 0, byteBuff.Length));
                }
            }
            catch (Exception ex)
            {
                return "Wrong Input. " + ex.Message;
            }
        }

        /// <summary>
        /// Decrypt the given string using the specified key.
        /// </summary>
        /// <param name="Str_ToDencrypt">The string to be decrypted.</param>
        /// <param name="strKey">The decryption key.</param>
        /// <returns>The decrypted string.</returns>
        public static string UDF_Dencrypt(string Str_ToDencrypt)
        {
            try
            {
                TripleDESCryptoServiceProvider objDESCrypto = new TripleDESCryptoServiceProvider();
                MD5CryptoServiceProvider ObjHashToMd5 = new MD5CryptoServiceProvider();
                byte[] byteBuff;
                String Str_TempKey = @"Aj@#C$7LTool$tripAcc)+_)%$@!#hgFj";
                ObjHashToMd5 = null;
                objDESCrypto.Key = ObjHashToMd5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(Str_TempKey));
                objDESCrypto.Mode = CipherMode.ECB; //CBC, CFB
                byteBuff = Convert.FromBase64String(Str_ToDencrypt);
                string strDecrypted = ASCIIEncoding.ASCII.GetString
                (objDESCrypto.CreateDecryptor().TransformFinalBlock
                (byteBuff, 0, byteBuff.Length));
                objDESCrypto = null;
                return strDecrypted;
            }
            catch (Exception ex)
            {
                return "Wrong Input. " + ex.Message;
            }
        }
    }
}