Affichage des articles dont le libellé est C#. Afficher tous les articles
Affichage des articles dont le libellé est C#. Afficher tous les articles

lundi 8 janvier 2018

Generate QrCode in RDLC with Qrcode.net and MemoryStream without saving it

  Je vous propose un code pour générer le QrCode dans un rapport RDLC sans avoir à le stocker dans un endroit précis

Pour Cela on utilise l'outil  QrCode.net , on insére le code suivant;
         ReportDataSource rds = new ReportDataSource();
                rds = new ReportDataSource("MyDataSet", list);
                              
                Bitmap BitmapCaptcha =  GenerateQrCode("HelloWord", Brushes.Black, Brushes.White, 200);
                MemoryStream ms = new MemoryStream();
                BitmapCaptcha.Save(ms, ImageFormat.Gif);
                var base64Data = Convert.ToBase64String(ms.ToArray());
                string QR_IMG = base64Data;
                ReportParameter parameter = new ReportParameter("QR_IMG", QR_IMG, true);

                ReportViewer1.LocalReport.EnableExternalImages = true;
                ReportViewer1.LocalReport.ReportPath = Page.Server.MapPath("~/rdlc/Fiche.rdlc");
                ReportViewer1.LocalReport.DataSources.Clear();
                ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { parameter });
                ReportViewer1.LocalReport.DataSources.Add(rds);

  public static Bitmap GenerateQrCode(string url, Brush darkColor, Brush lightColor, int size)
        {
            var encoder = new QrEncoder(ErrorCorrectionLevel.L);
            var code = encoder.Encode(url);
            var renderer = new GraphicsRenderer(new FixedCodeSize(size, QuietZoneModules.Zero), darkColor, lightColor);
            using (var ms = new MemoryStream())
            {
                renderer.WriteToStream(code.Matrix, ImageFormat.Png, ms);
                return new Bitmap(ms);
            }
        }


Au niveau du RDLC :

on insére une image
 on met dans le mimetype : image/gif
dans Source:  Database
dans value: = System.Convert.FromBase64String(Parameters!QR_IMG.Value)


pour plus de détails laissez un commentaire.




vendredi 7 mars 2014

ASP.net Captcha

HTTP Handlers are components that implement the System.Web.IHttpHandler interface. It writes some data to the server HTTP response. A file ending with .ashx. In SharePoint they are deployed to the _layouts directory. Generic handlers are a lightweight and quickier way then creating a SharePoint web service layer. I have found them especially useful in getting data from server side to the client side as JSON. They are also useful in AJAX anonymous access scenarios when you cannot use SharePoint .asmx services.
In the recent project I’ve been doing at work, we have created a few Generic HTTPHandlers to call search and return the results as JSON. This has allowed us to have a pure AJAX single page application that can call server side code.
Visual Studio Item Templates for Generic Handlers are not directly supported by Visual Studio SharePoint Projects. When you Add New Item… and search for Installed Templates in a SharePoint project, you will not find Generic Handler anywhere. The ASP.NET handler will require extra work for you making entries in the web.config just to get it to work. There are two solutions to get a Generic Handler in SharePoint:
  • Use CKSDev. By Installing CKSDev there will be a built in handler that will work for you. Just select it when Adding a New Item, and then set the Build Action to Content. Once deployed you will find it at location http://<site>/_layouts/<ProjectName>/myhandler.ashx (Make sure that you add the handler to the feature)
  • Without using CKSDev.
    • Add New Item… and add an Application page, but name the extension .ashx.
    • Delete the ashx.designer.cs file.
    • Open the .ashx file, delete the contents, and replace with the following. (Add your own GUID and ensure all letters are lower case).
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ WebHandler Class="$SharePoint.Type.be94b0d0-ca37-4783-b8e9-06ba0477a22f.FullName$" %>
  • Open the ashx.cs file.
  • Add the using statement using System.Web
  • Add the using statement using System.Runtime.IntropServices;
  • Change your namespace if you want.
  • Change the class to inherit from IHttpHandler
  • Implement the IHttpHandler interface. (IsReusable and ProcessRequest)
  • Add [Guid("BE94B0D0-CA37-4783-B8E9-06BA0477A22F")] (Guid should match the Guid from the ASHX page, except uppercase)
  • In the Solution Explorer, click the .ashx file and in the Properties pane, set the Build Action to Content.
  • In the Solution Explorer, click the .ashx.cs file and in the Properties pane, set the Build Action to Compile.
  • Now we need to Save and Close the solution.
  • Edit the .csproj file and add the following text to a PropertyGroup, and reload your project in Visual Studio.
<PropertyGroup>
<TokenReplacementFileExtensions>ashx</TokenReplacementFileExtensions>
</PropertyGroup>



jeudi 27 février 2014

Downloading Files C#

A lot of questions are being asked about downloading a file from the web server to the client in ASP.NET. I have updated this blog post due to the high number of view & comments. You will realize i added a function called "ReturnExtension" which will return the proper content type and set it to the Response.ContentType property. Almost well known file types are supported.
C# Code
   // Get the physical Path of the file(test.doc)
   string filepath = Server.MapPath("test.doc");
   // Create New instance of FileInfo class to get the properties of the file being downloaded
   FileInfo file = new FileInfo(filepath);
  
   // Checking if file exists
   if (file.Exists)
   {
    // Clear the content of the response
    Response.ClearContent();
    
    // LINE1: Add the file name and attachment, which will force the open/cance/save dialog to show, to the header
    Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
    
    // Add the file size into the response header
    Response.AddHeader("Content-Length", file.Length.ToString());
    // Set the ContentType
    Response.ContentType = ReturnExtension(file.Extension.ToLower());
    // Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
    Response.TransmitFile(file.FullName);
    // End the response
    Response.End();
   }
private string ReturnExtension(string fileExtension)
{
     switch (fileExtension)
            {
                case ".htm":
                case ".html":
                case ".log":
                    return "text/HTML";
                case ".txt":
                    return "text/plain";
                case ".doc":
                    return "application/ms-word";
                case ".tiff":
                case ".tif":
                    return "image/tiff";
                case ".asf":
                    return "video/x-ms-asf";
                case ".avi":
                    return "video/avi";
                case ".zip":
                    return "application/zip";
                case ".xls":
                case ".csv":
                    return "application/vnd.ms-excel";
                case ".gif":
                    return "image/gif";
                case ".jpg":
                case "jpeg":
                    return "image/jpeg";
                case ".bmp":
                    return "image/bmp";
                case ".wav":
                    return "audio/wav";
                case ".mp3":
                    return "audio/mpeg3";
                case ".mpg":
                case "mpeg":
                    return "video/mpeg";
                case ".rtf":
                    return "application/rtf";
                case ".asp":
                    return "text/asp";
                case ".pdf":
                    return "application/pdf";
                case ".fdf":
                    return "application/vnd.fdf";
                case ".ppt":
                    return "application/mspowerpoint";
                case ".dwg":
                    return "image/vnd.dwg";
                case ".msg":
                    return "application/msoutlook";
                case ".xml":
                case ".sdxl":
                    return "application/xml";
                case ".xdp":
                    return "application/vnd.adobe.xdp+xml";
                default:
                    return "application/octet-stream";
}
N.B:  If you want to bypass the Open/Save/Cancel dialog you just need to replace LINE1 by the below code
Response.AddHeader("Content-Disposition", "inline; filename=" + file.Name);
Response.TransmitFile VS Response.WriteFile:  1- TransmitFile: This method sends the file to the client without loading it to the Application memory on the server. It is the ideal way to use it if the file size being download is large.
 2- WriteFile: This method loads the file being download to the server's memory before sending it to the client. If the file size is large, you might the ASPNET worker process might get restarted.
Hope this helps,

mardi 25 février 2014

Crypter et Décrypter en C#

        public string encrypt(string message)
        {
            byte[] results;
            string passphrase = "Password123";
            UTF8Encoding utf8 = new UTF8Encoding();
            //to create the object for UTF8Encoding  class
            //TO create the object for MD5CryptoServiceProvider
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] deskey = md5.ComputeHash(utf8.GetBytes(passphrase));
            //to convert to binary passkey
            //TO create the object for  TripleDESCryptoServiceProvider
            TripleDESCryptoServiceProvider desalg = new TripleDESCryptoServiceProvider();
            desalg.Key = deskey;//to  pass encode key
            desalg.Mode = CipherMode.ECB;
            desalg.Padding = PaddingMode.PKCS7;
            byte[] encrypt_data = utf8.GetBytes(message);
            //to convert the string to utf encoding binary

            try
            {
                //To transform the utf binary code to md5 encrypt   
                ICryptoTransform encryptor = desalg.CreateEncryptor();
                results = encryptor.TransformFinalBlock(encrypt_data, 0, encrypt_data.Length);
            }
            finally
            {
            //to clear the allocated memory
            desalg.Clear();
            md5.Clear();
            }
            //to convert to 64 bit string from converted md5 algorithm binary code
            return Convert.ToBase64String(results);
            }
           
           
         public string decrypt(string message)
        {
            byte[] results;
            string passphrase = "Password123";
            UTF8Encoding utf8 = new UTF8Encoding();
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] deskey = md5.ComputeHash(utf8.GetBytes(passphrase));
            TripleDESCryptoServiceProvider desalg = new TripleDESCryptoServiceProvider();
            desalg.Key = deskey;
            desalg.Mode = CipherMode.ECB;
            desalg.Padding = PaddingMode.PKCS7;
            byte[] decrypt_data = Convert.FromBase64String(message);
            try
            {
                //To transform the utf binary code to md5 decrypt
                ICryptoTransform decryptor = desalg.CreateDecryptor();
                results = decryptor.TransformFinalBlock(decrypt_data, 0, decrypt_data.Length);
            }
            finally
            {
                desalg.Clear();
                md5.Clear();

            }
            //TO convert decrypted binery code to string
            return utf8.GetString(results);
        }

mardi 4 février 2014

Programme console qui insère les données dans une base précise en C#



public class Program
{
public static void Main(string[] args)
{

Console.WriteLine("This program will insert data in database");
SqlConnection sqlConnection = new SqlConnection(@"data source=NOMDUSERVEUR;initialcatalog=NOMBASEDEDONNES;user id=IDUSER;password=PASSWORD;Trusted_Connection=true;");
sqlConnection.Open();
// Insértion des comptes
for (int i = 0; i < 9000; i++)
{
String insertSql = String.Format("INSERT INTO [dbo].[Compte]([Login],[Email] ,[Nom], [Prenom],[Pays_Id],[Password],[isValid],[langue]) VALUES ('Login','XXX@yahoo.fr','XXX', 'XXXX',60,'111',1,null)");
SqlCommand sqlCommand = new SqlCommand(insertSql, sqlConnection);
sqlCommand.ExecuteNonQuery();
}
Console.ReadLine();

mercredi 29 janvier 2014

Trier une liste d'objets selon un critère précis C#

    if (infosLetterList != null && infosLetterList.Count > 0)
    {
        infosLetterList.Sort(delegate(InfoLetter a1, InfoLetter a2) { return string.Compare(a1.CentreInteret, a2.CentreInteret); });
    }

lundi 27 janvier 2014

Session lost problem after Response.Redirect

If you create a session like this and redirect the user to some other page, the session will lost.

Session["UserId"] = "User1";
Response.Redirect("YourPage.aspx");

This is because of the working of session and Response.Redirect, Lets go through.

" When you create a new session (that is, the first time you write to a Session variable), ASP.NET sets a volatile cookie on the client that contains the session token. On all subsequent requests, and as long as the server session and the client cookie have not expired, ASP.NET can look at this cookie and find the right session.
Now, what Redirect does is to send a special header to the client so that it asks the server for a different page than the one it was waiting for. Server-side, after sending this header, Redirect ends the response. This is a very violent thing to do. Response.End actually stops the execution of the page wherever it is using a ThreadAbortException.
What happens really here is that the session token gets lost in the battle.
There are a few things you can do to solve this problem.
First, in the case of the forms authentication, we already provide a special redirect method: FormsAuthentication.RedirectFromLoginPage. This method is great because, well, it works, and also because it will return the user to the page he was asking for in the first place, and not always default. This means that the user can bookmark protected pages on the site, among other things. " - Bertrand Le Roy
Another thing you can do is use the overloaded version of Redirect:

Response.Redirect("YourPage.aspx", false);

This does not abort the thread and thus conserve the session token. Actually, this overload is used internally by RedirectFromLoginPage.

mardi 21 janvier 2014

Générer un excel avec C#

   public void FichierExcel(List<BeanTelechargementAppelOffre> DemandesBeans)
        {


            HttpResponse response = HttpContext.Current.Response;
            response.Clear();
            response.Charset = "";
            response.ContentType = "application/vnd.ms-excel";
            response.AddHeader("Content-Disposition", "attachment;filename=\"" +"ListeEntreprises.xls" + "\"");

            Table tbl = new Table() { BorderWidth = new Unit(1) };
            TableHeaderRow th = new TableHeaderRow();
            th.Font.Bold = true;
            th.Cells.Add(new TableCell() { Text = "Liste des Personnes", ColumnSpan = 4, HorizontalAlign = HorizontalAlign.Center, BackColor = Color.DarkBlue, ForeColor = Color.White });
            tbl.Rows.Add(th);

            th = new TableHeaderRow();
            th.Font.Bold = true;

            th.Cells.Add(new TableCell() { Text = "Nom ou raison sociale", BackColor = Color.DarkBlue, ForeColor = Color.White, BorderWidth = new Unit(1) });
            th.Cells.Add(new TableCell() { Text = "Les pi&egrave;ces t&eacute;l&eacute;charg&eacute;es", BackColor = Color.DarkBlue, ForeColor = Color.White, BorderWidth = new Unit(1) });
            th.Cells.Add(new TableCell() { Text = "Email de la personne", BackColor = Color.DarkBlue, ForeColor = Color.White, BorderWidth = new Unit(1) });
            th.Cells.Add(new TableCell() { Text = "Date de la consultation", BackColor = Color.DarkBlue, ForeColor = Color.White, BorderWidth = new Unit(1) });

            tbl.Rows.Add(th);
            foreach (BeanTelechargementAppelOffre bean1 in DemandesBeans)
            {

                var tr = new TableRow();
                tr.Cells.Add(new TableCell() { Text = "" + bean1.NomPersonne, BorderWidth = new Unit(1) });
                tr.Cells.Add(new TableCell() { Text = bean1.TypeFichier, HorizontalAlign = HorizontalAlign.Center, BorderWidth = new Unit(1) });
                tr.Cells.Add(new TableCell() { Text = bean1.EmailPersonne, HorizontalAlign = HorizontalAlign.Center, BorderWidth = new Unit(1) });
                tr.Cells.Add(new TableCell() { Text = Convert.ToDateTime(bean1.DateConsultation).ToShortDateString(), HorizontalAlign = HorizontalAlign.Center, BorderWidth = new Unit(1) });
                tbl.Rows.Add(tr);
            }
            System.Text.StringBuilder stb = new System.Text.StringBuilder();
            System.IO.StringWriter sw = new System.IO.StringWriter(stb);
            HtmlTextWriter textWriter = new HtmlTextWriter(sw);
            tbl.RenderControl(textWriter);
            response.Write(stb.ToString());
            response.End();
        }