venerdì 13 dicembre 2013

MySql Contare il numero di record secondo un campo blank o null

Spesso si vogliono contare il numero di records laddove uno specifico campo sia null o blank, da notare la differenza tra null e blank, in quanto un campo potrebbe essere solo blank e non null...

Un modo per farlo è questo :
SELECT count(*) FROM `Tabella` WHERE email >''

martedì 4 settembre 2012

Esercizio Php creare tabella Html con numero n di righe e numero n di colonne


    <?
      $colori=array
(
"rosso",
"blu",
"verde",
"giallo",
"arancione",
"grigio",
"viola",
"celeste",
"bianco",
"turchese",
"fuxia",
"nero"
) ;

echo "<table border='1'>";
$counter=0;
$righe = 3;
$colonne =4;

for($i=0;$i<$righe;$i++)
{
echo "<tr>";

  for($z=0;$z<$colonne;$z++)
      {
      echo "<td>" .$colori[$counter] . "</td>";
      $counter++;
      }
echo "</tr>";
}
echo "</table>";
    ?>

Eseguibili Python in Windows con py2exe

Py2exe è un programma che permette di creare eseguibile Windows in grado di incorporare tutto il codice Python in un solo eseguibile.

In tal modo è possibile lanciare eseguibili Python senza dover installare il runtime, ossia tutte le dll necessarie per eseguire programmi Python.

Basti pensare che BitTorrent utilizza Py2exe .

Il sito proponi molto tutorial per compilare i propri script Python rendendoli eseguibili.

mercoledì 14 dicembre 2011

Come scrivere e leggere cookies in Asp Net con C# Visual Studio 2010

In questo esempio vediamo come utilizzare la classe HttpCookie.

La classe HttpCookie va istanziata con l'operatore new:
 HttpCookie cookie = new HttpCookie(NameField.Text);

Nel costruttore viene passato il nome con cui si vuole creare un cookie.

Un cookie è un file di testo contenuto nel computer dell'utente che naviga nel sito.

Vediamo l'esempio completo la pagina
GestioneCookies.aspx.cs :


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class GestioneCookies : System.Web.UI.Page
{
    //Gestione dei cookies in lettura e scrittura

    protected void Page_Load(object sender, EventArgs e)
    {

        if (IsPostBack)
        {
            HyperLink1.Visible = true;
            HyperLink1.NavigateUrl = "LeggiCookie.aspx?cookie=" +  NameField.Text.ToString();
       
        }

    }
    protected void click_invia(object sender, EventArgs e)
    {
        //Ora
        HttpCookie cookie = new HttpCookie(NameField.Text);

        //Assegniamo il valore al cookie
        cookie.Value = ValoreField.Text;

        //il cookie deve sparire dopo 1 minuto
        DateTime dtNow = DateTime.Now;
        TimeSpan tsminute = new TimeSpan(0, 1, 0, 0);

        cookie.Expires = dtNow + tsminute;

        //Scriviamo il cookie, mandandolo al Browser
        Response.Cookies.Add(cookie);

        Response.Write("Cookie è stato aggiunto!");
    }
}

Ora il file GestioneCookie.aspx:


<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="GestioneCookies.aspx.cs" Inherits="GestioneCookies" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>


<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
<div>
Cookie  Nome
<asp:TextBox runat="server" ID="NameField"></asp:TextBox> <br />
Cookie Valore
<asp:TextBox runat="server" ID="ValoreField"></asp:TextBox> <br />

<asp:HyperLink runat="server" Text="Leggi Cookie" ID="HyperLink1" NavigateUrl="Read.aspx" Visible="false"></asp:HyperLink>

<asp:Button Text="Invia" runat="server" onclick="click_invia" />

</div>

</asp:Content>


Per leggere il cookie usiamo il file LeggiCookie.asp.cs:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

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

        if (Request.QueryString["cookie"] != null)
            ReadCookies();



    }
    private void ReadCookies()
    {
        string CookieName = Request.QueryString["cookie"];

        HttpCookie cookie = Request.Cookies[CookieName];

        if (cookie == null)
        {
            Response.Write("Not Found!");
        }
        else
        {
            string valorecookie = cookie.Value;
            Response.Write( "Il cookie contiene :" +  valorecookie);
       
        }
   
    }


}

e LeggiCookie.aspx:


<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="LeggiCookie.aspx.cs" Inherits="LeggiCookie" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
</asp:Content>

In sostanza per leggere un cookie dobbiamo :
HttpCookie cookie = Request.Cookies[CookieName];

Utilizziamo l'insieme Cookies da Request, mettendo come indice il nome del Cookie di cui vogliamo ritrovare il valore associato.

Per il corso di C# online:
http://www.corsilezioni.com/corso_c_sharp.html





lunedì 12 dicembre 2011

asp net trovare controlli all'interno di DataList

Spesso e volentieri non possiamo fare riferimento a controlli dentro DataList, ovvero non possiamo utilizzarli in modo diretto.

Possiamo però usare escamotage per referenziare tali controlli.

Immaginiamo l'esigenza di dover usare una label nel footer di un DataList che si chiama PagerLocation.

Essendo all'interno del Footer, non possiamo usare il semplice PagerLocation per utilizzare proprietà e metodi.

Possiamo però creare un evento nel codice behind:


<FooterStyle Font-Italic="True" Font-Size="9pt"></FooterStyle>
     

        <FooterTemplate>
    <div id="Navigation" class="navigation" runat="server">

        <div id="leftnav">
            &nbsp;
            <a id="PreviousPageNav" runat="server"> &lt;&lt; Previous Products</a>
        </div>
     
        <div id="rightnav">
            &nbsp;
            <a id="NextPageNav" runat="server">More Products &gt;&gt;</a>
        </div>
 
        <div id="numnav">
            <asp:Label ID="PagerLocation" OnLoad="PagerLocation_OnLoad" runat="server" />
        </div>
 
    </div>
</FooterTemplate>

Si vede chiaramente che viene creato un evento OnLoad su caricamento del controllo.

Ora per utilizzare il controllo semplicemente :


public Label PagerLocation;
protected void PagerLocation_OnLoad(object sender, EventArgs e)
{
    PagerLocation = (Label)sender;
    //add code here to do what you wish with the button
}

In questo modo possiamo utilizzare la nostra Label in tutta la pagine laddove ci occorre.

Possiamo utilizzare questo metodo anche per altri controlli.


venerdì 9 dicembre 2011

SqlDataAdapter e DataSet con Sql Server, aggiornare e listare i dati utilizzando un DataSet con C#


Come ciclare una tabella di Sql Server utilizzando gli oggetti SqlDataAdapter e DataSet .

Prima cosa da fare è utilizzare una stringa di connessione valida ecco un esempio preso da un generico web.config:

<connectionStrings>
<add name="ConnSqlServer" connectionString="Data Source=PIERO-SEVEN;Initial Catalog=test1;User ID=sa;Password=test"/>
</connectionStrings>

Per estrarre dal web.config la stringa di connessione denominata ConnSqlServer, utilizziamo l’oggetto del namespace Configuration, ConfigurationManager, l’array ConnectionStrings, il quale contiene tutte le stringhe di connessione inserite all’interno del web.config.

Utilizzare questo metodo ci permette di creare un codice pulito e mantenibile.

Una volta ottenuta la stringa di connessione utilizziamo il SqlDataAdapter che automaticamente apre la connessione al Server.

   string connstring =  ConfigurationManager.ConnectionStrings["ConnSqlServer"].ToString();

    SqlDataAdapter Sa = new SqlDataAdapter("Select * from Category", connstring);


Affinché DataSet generico e database vero e proprio possano comunicare viene usato appunto l’oggetto SqlDataAdapter, il quale si occupa di riempire ed aggiornare i DataSet, possiamo immaginare il SqlDataAdapter come la classe che chiede le query al Server, e poi procede a riempire il DataSet.

Vediamo le modalità con cui questo procedimento avviene.


    SqlDataAdapter Sa = new SqlDataAdapter("Select * from Category", connstring);
In questo modo viene automaticamente fatta la connessione al Server, passando il comando di selezione da utilizzare per il recupero dei dati.

A questo punto il passo successivo ovvio è quello di istanziare un oggetto di tipo DataSet:

DataSet Ds = new DataSet();

Un DataSet è un oggetto particolare, immaginiamolo come un array particolare che contiene tutti i dati che il SqlDataAdapter ha passato, questi dati solitamente sono inseriti in un altro oggetto che rappresenta la mappatura con i dati stessi, tale oggetto è il DataTable.

Solitamente un DataSet può gestire più DataTable, ragion per cui, il DataSet contiene un array di DataTable, chiamato DataTables.

Per cui per utilizzare ciascuna DataTable utilizziamo gli indici numeri o alfanumerici.

Per riempire il DataSet utilizziamo il comando Fill che è un metodo del SqlDataAdapter, che riempie il DataSet stesso:

Sa.Fill(Ds,"TblExample");

Utilizzando il comando sopra, viene riempita una DataTable che viene chiamata in memoria  TblExample; se non viene specificato alcun nome, il DataTable viene mappato utilizzando il nome “Table”.

Possiamo accedere al DataTable name utilizzando un semplice comando :

string DataTableName = Ds.Tables[0].TableName;

Di conseguenza se abbiamo usato questa sintassi: Sa.Fill(Ds,"Category"); , per poter fare riferimento a questa DataTable dobbiamo usare questa sintassi:
Ds.Tables["Category"];

Ogni DataTable contiene un array di righe chiamato Rows.

       foreach (DataRow Dr in Ds.Tables["Category"].Rows)
       {
           Response.Write(Dr["Description"].ToString () );
           
       }

In questo caso utilizziamo foreach che cicla tutte le DataRow contenute nel DataTable del DataSet Ds.
Per accedere al valore di un campo è molto semplice basta utilizzare il nome colonna come indice: Dr["Description"].ToString () .

PROCEDURA PER AGGIORNARE I DATI VERSO SQL SERVER

In questo caso dobbiamo capire come il DataSet potrà essere rimandato al server per effettuare gli aggiornamenti.

Nel precedente codice abbiamo visto che il DataRow è accessibile in modalità lettura; ora vedremo che possiamo fare la stessa cosa per aggiornare anche le righe:

Dr["Description"] = "TestUpdate";

Con questa istruzione aggiorno il DataSet in quella riga e per quella colonna al valore "TestUpdate”

Il SqlDataAdapter è anche in grado di aggiornare i dati tramite particolari accorgimenti.

Dobbiamo utilizzare un nuovo oggetto il SqlCommandBuilder a cui dobbiamo passare il SqlDataAdapter.

Il SqlDataAdapter per aggiornare necessita di sapere l’UpdateCommand
Ecco come lo passiamo utilizzando proprio l’oggetto SqlCommandBuilder:
       
SqlCommandBuilder Scb = new SqlCommandBuilder(Sa);
        Sa.UpdateCommand = Scb.GetUpdateCommand();

Nel codice sopra richiediamo al SqlCommandBuilder di passare il codice necessario per aggiornare , GetUpdateCommand infatti permette al SqlDataAdapter di avere tutto il necessario per effettuare l’aggiornamento.
A questo punto al SqlDataAdapter possiamo passare il DataSet carico dei nuovi aggiornamenti;
Sa.Update(Ds, "Category");

A questo punto rivediamo tutto il codice per scorrere ed aggiornare le righe:

   protected void LoadSettings()
   {
   try{
   //Ric database dal web config
       


       //Get from ConfigurationManager.ConnectionStrings , the array
       string connstring =  ConfigurationManager.ConnectionStrings["ConnSqlServer"].ToString();

       SqlDataAdapter Sa = new SqlDataAdapter("Select * from Category", connstring);

      
       DataSet Ds = new DataSet();

       Sa.Fill(Ds, "Category");

       string DataTableName = Ds.Tables[0].TableName;

       foreach (DataRow Dr in Ds.Tables["Category"].Rows)
       {
           Response.Write(Dr["Description"].ToString () );
           Dr["Description"] = "TestUpdate";
       }

       SqlCommandBuilder Scb = new SqlCommandBuilder(Sa);
       Sa.UpdateCommand = Scb.GetUpdateCommand();

       Sa.Update(Ds, "TblExample");



   }
   catch (Exception e) { Response.Write(e.Message); }
   
   }


Utilizziamo i seguenti namespaces:
using System.Configuration;
using System.Data.SqlClient;
using System.Data;

Il namespace Configuration ci permette di accedere al web.config.
il namespace Data.SqlClient ci permette di utilizzare gli oggetti Sql Server per manipolare i dati.
Il namespace System.Data per utilizzare i DataSet ed oggetti correllati.

mercoledì 7 dicembre 2011

Rinominare le Stored Procedures in Sql Server 2008

Per rinominare le Stored Procedures in Sql Server 2008, possiamo usare una stessa Stored Procedure, chiamata sp_rename.

exec sp_rename 'StoredProcedure1' as 'StoreAcquisti'

In questo caso viene eseguita la Stored Procedure a cui sono passati due parametri, il nome dell'oggetto da rinominare ed il nuovo che si vuole attribuire.

In particolare possiamo usare Server Explorer di Visual Studio 2010.


Nello screenshot sopra appare il codice da eseguire.