mercoledì 12 settembre 2018

lunedì 9 luglio 2018

Invio email tramite l'oggetto MailMessage in c#

In questo esempio si può inviare un'email tramite librerie che mette a disposizione il framework .Net utilizzando il linguaggio c#.
Si può utilizzare questo metodo passando come argomenti il mittente, l'oggetto dell'email, il corpo del messaggio, una stringa di una serie di destinatari separati da una virgola e infine il parametro smtp del server:

 
public static void SendMailMessage(string mailSender, string obj, string msg, string recipients, string smtpserver)
{
 try { 
  MailMessage mailMessage = new MailMessage();
  MailAddress sender = new MailAddress(mailSender);
  foreach (string email in recipients.Split(",".ToCharArray()))
  {
   mailMessage.To.Add(email);
  }
  mailMessage.From = sender;
  mailMessage.Subject = obj;
  mailMessage.Body = msg; 
  SmtpClient server = new SmtpClient(smtpserver);   
  server.Send(mailMessage);     
  mailMessage.Dispose();
  server = null;
 }
 catch (Exception e)
 {
  //some code here
 }
}

lunedì 2 luglio 2018

Comprimere file in formato zip con c#

Un modo per comprimere dei file in formato zip con linguaggio c#, è quello di di utilizzare la libreria DotNetZip
disponibile sul sito https://archive.codeplex.com/?p=dotnetzip
Componente abbastanza valido perchè sono riuscito a comprimere un file uguale o inferiore a 2.5 Gb utilizzando DotNetZip, una libreria gratuita.
Per utilizzare questo esempio bisognerà scaricare la libreria e importarla nella solution di Visual Studio come una classica dll (tasto dx e add reference).

 
try
{
 using (ZipFile zip = new ZipFile())
  {
   zip.ParallelDeflateThreshold = -1; 
   zip.AddFile("c:\test1.doc", ""); //example file
   zip.AddFile("c:\test2.txt", ""); //example file
   //....other files
   zip.Save("c:\dirzip\test_zip.zip"); //example dir and file
  }
 }
catch (ZipException e)
{
 //some code here
}

lunedì 25 giugno 2018

Lettura riga per riga di un file di testo in c#

Un altro modo per leggere un file di testo in c# è creare un oggetto StreamReader e analizzare ogni riga in un ciclo while come fatto in questo esempio:

StreamReader reader = new StreamReader(File.OpenRead("c:\test.txt"));
try
{
 while (!reader.EndOfStream)
 {
  var line = reader.ReadLine();  
 }
}
catch (Exception ex)
{
 //code here
}
finally
{
 reader.Close();
}

sabato 19 maggio 2018

Accesso al database Oracle tramite c#

Piccolo esempio che illustra un accesso al database Oracle tramite statement e una restituzione del numero di record presenti sulla tabella Authors in c#.
E' stato utilizzata la libreria OracleClient da referenziare nel progetto .Net in Visual Studio

//using System.Data.OracleClient;

private static void testConnectionDB()
{
OracleConnection conn = new OracleConnection(oraConn);
int intRecord = 0;
string str1="Florence";
string str2="Italy";
try
{
 conn.Open();
 OracleCommand cmd = conn.CreateCommand();

 cmd.CommandType = CommandType.Text;
 cmd.CommandText = "select count(*) as numAuthors from Authors +
     " where field1 =:strField1 and field2 =:strField2";

 cmd.Parameters.AddWithValue("strField1", str1);
 cmd.Parameters.AddWithValue("strField2", str2);

 intRecord = Convert.ToInt32(cmd.ExecuteScalar()); 
  
}
catch (Exception ex)
{
 log.Error(ex.Message);
}
finally
{
   cmd.Dispose();

   if (conn.State != ConnectionState.Closed)
   {
    conn.Close();
   }
}

mercoledì 14 marzo 2018

Resize image e rotate image in php prima di eseguire un update su MySql

Immaginiamo un form in php con un'immagine da uploadare su db Mysql e la vogliamo ridimensionare e ruotare prima di inserirla o aggiornarla.
Ecco un esempio di codice php per aggiornare una tabella in un database con un'immagine ridimensionata e ruotata a 90 gradi:
$pdo = Database::connect();
$idArticle=$_POST["idart"];

$query = "SELECT Image FROM Table WHERE Id=?"; 
try{
 $pdo_statement = $pdo->prepare($query);
 $pdo_statement->bindParam(1,$idArticle );
 $pdo_statement->execute();
 
 $num = $pdo_statement->rowCount();

 if ($num) {
  $row = $pdo_statement->fetch(PDO::FETCH_ASSOC);
  if($row['Image']!=null){
   $image = imagecreatefromstring($row['Image']);
   $w = imagesx($image);
   $h = imagesy($image);
   
   //resize image
   $ratio=0.5;
   $larg = $w/$ratio;
   $alt = $h/$ratio;
   $image = imagescale($image, $larg, $alt);
   
   ob_start();
   
   //rotate image
   $transp = imagecolorallocatealpha($image,0,0,0,127 );
   $image  = imagerotate($image, 90, $transp, 1);
   
   imagejpeg($image);

   $contents = ob_get_contents();
   ob_end_clean();

   imagedestroy($image);

   $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
   $sql = "UPDATE Table set Image=? WHERE Id=?";
   $pdo = $pdo->prepare($sql);
   $pdo->bindParam(1, $contents, PDO::PARAM_LOB);
   $pdo->bindParam(2, $idArticle);

   $pdo->execute();
   
   echo " img src='data:image/jpeg;base64,".base64_encode($contents)."' / ";
  }
 }else{
  return null;
 }
}catch(PDOException $e) 
{
 echo $e->getMessage();
}

Database::disconnect();

venerdì 9 marzo 2018

Chiamare un web service in modalità asincrona e sincrona in c#

Il seguente esempio è una chiamata ad un metodo di un web service in c# con una risposta in modalità sincrona o asincrona.

Decommentando la parte di wait response si potrà attendere l'esito, altrimenti verrà restituito un risultato mentre l'elaborazione sarà in corso.
public class ServiceExample : System.Web.Services.WebService
    {
 private delegate string AsyncMethodCallerCreateZip(string idArticle, out string outResult);
  
 [WebMethod(Description = "An example")]
 public string FirstElaboration(string idArticle)
 {
  try
  {
   //Async call
   AsyncMethodCallerCreateZip caller = new AsyncMethodCallerCreateZip(CreateZip);
   IAsyncResult result = caller.BeginInvoke(idArticle, out outResult, null, null);

   //wait response
   //result.AsyncWaitHandle.WaitOne();
   //string returnValue = caller.EndInvoke(out outResult, result);
   //result.AsyncWaitHandle.Close();
   //return returnValue;

   return "OK";
  }
  catch (Exception ex)
  {
   return "KO";
  }
 }

 public string CreateZip(string idArticle, out string outResp)
 {
  //code here
  return outResp;
 }
}

giovedì 1 febbraio 2018

Aggiornamento portfolio su dreamstime.com

Nuovo maxi aggiornamento del mio portfolio su dreamstime.com. Molte foto sono state accettate e catalogate in "Nature", "Landscape" e "Ruins".