giovedì 28 febbraio 2008

MySql - Richiamare Stored Functions

MySql con la release 5 ha introdotto, tra le altre cose anche la possibilità di gestire delle Stored Functions (User Defined Functions).

Per la realizzazione della prova ho generato una nuova funzione tramite MySqlAdministrator

CREATE DEFINER=`root`@`%` FUNCTION `function1`(inValue int) RETURNS int(11)
BEGIN
  declare retValue INTEGER DEFAULT 0;
  set retValue = inValue + 1;
  RETURN retValue;
END

Sostanzialmente fa pochissimo, restituisce il valore in input + 1

La chiamata da console Mysql diventa:


mysql> select function1(10)
    -> ;
+---------------+
| function1(10) |
+---------------+
|            11 |
+---------------+
1 row in set (0.00 sec)

La chiamata da VB.NET diventa:

Dim cm As New MySqlCommand("Select function1(?inValue)", cn)
Dim prm As New MySqlParameter
prm.ParameterName = "?inValue"
prm.DbType = DbType.Int32
prm.Value = 12
cm.Parameters.Add(prm)
Dim o As Object
o = cm.ExecuteScalar()
MessageBox.Show(o.ToString)

Da C#
MySqlCommand cm = new MySqlCommand("Select function1(?inValue)", cn);
MySqlParameter prm = new MySqlParameter();
prm.ParameterName = "?inValue";
prm.DbType = DbType.Int32;
prm.Value = i;
cm.Parameters.Add(prm);
object o = cm.ExecuteScalar();
MessageBox.Show(o.ToString);

Riferimenti:

Manuale Stored Procedure su MySql
MySql

venerdì 22 febbraio 2008

Microsoft Visual Basic Power Packs 3.0 - Nuovo aggiornamento disponibile

E' disponibile un nuovo aggiornamento di Visual Basic Power Packs 
Contiene dei nuovi controlli per le applicazioni VB.NET

  • DataRepeater - consente di popolare windows forms
  • Line e Shape
  • Printer Library che rende piena o quasi la compatibilità con l'analoga libreria presente su vb6
  • PrintForm

Sicuramente fanno comodo!

sabato 16 febbraio 2008

VSTO Visual Studio Tools for Office - Una piccola delusione

Dall'avvento di Office 2003 con Visual Studio 2003 sono stati introdotti, è noto, una serie di strumenti che permettono una agevole generazione di nuovi "addon" e template per Office.
La piccola delusione deriva dal fatto che, almeno per quanto riguarda il mio ristretto orticello, nessuno ha intenzione di prendere addon o template realizzati con VSTO.
Addirittura molti hanno ancora Office 2000 (e 97) e non ci pensano proprio a migrare, se a questo aggiungiamo l'impatto epocale della nuova interfaccia di Office 2007 (a volte è necessario un piccolo training per ritrovare le vecchie funzioni) la frittata è completa.
Mi sono preso il mio bel manuale di VSTO ho giocato con VSTO e lì mi sono fermato, paradossalmente in alcune situazioni VSTO è controproducente perchè molti preferiscono il vecchio e consolidato VBA che funziona anche con Office 2000 e non mi costringe a migrare a Office 2003/2007 ?

domenica 3 febbraio 2008

Giocando con le combinazioni

Ho realizzato un piccolo esempio di generazione e composizione stringa a partire da caratteri e simboli presenti nella codifica ASCII dalla posizione 32 (spazio) alla 126 ~ (tilde) compresi.

Si può scegliere il numero di caratteri da calcolare e scegliere la composizione.

Le combinazioni ottenute sono facilmente calcolabili pari al numero di caratteri composizione elevato al numero di caratteri scelti, nel nosro caso con tutti i caratteri (numeri, simboli, maiuscoli, minuscoli) con solo 3 caratteri si arriva alla bellezza di 857375 combinazioni!

Questo mi fa venire in mente la scena di WarGames con il computer che tentava di indovinare la password per lanciare i missili, a parte la fandonia di dire che un particolare carattere della password era corretto (un baco che affliggeva il primo netbios) calcolare l'intera combinazione di 10 caratteri (CPE1704TKS) usando solo caratteri maiuscoli e numeri comporta la bella cifra di 3,65615844006298E+15 un numero veramente spropositato di tentativi impossibile per i computers del 1983 anche avendo a disposizione un Univac.

La funzione ricorsiva di calcolo stringhe 

void Combinazioni(string valore, int posizione)
{
      int x = posizione;
      if (x >= valore.Length)
             return;
       char c = valore.Substring(posizione,1).ToCharArray()[0];
       int k = caratteriAmmessi.IndexOf(c);
       if (k < 0)
             k = 0;

       for (int i = k; i < caratteriAmmessi.Length; i++)
       {

             // trasformazione della stringa in array di bytes
             byte[] b = System.Text.Encoding.ASCII.GetBytes(valore);
             // sostituzione del carattere posizionato
             b[x] = (byte) caratteriAmmessi.Substring(i,1).ToCharArray()[0];
             string txt = System.Text.Encoding.ASCII.GetString(b);

             if (txt != valore)
             {
                   sb.Append(txt);
                   sb.Append(Environment.NewLine);
              }

                // richiamo della funzione ricorsiva
             Combinazioni(txt,x + 1);

         }
}

Esempio in C#

Powerered with Window Live Write

Archivio Sportelli Bancari - Elenco Abi Cab Aggiornato a fine Gennaio 2008

'archivio sportelli bancari elenco Abi Cab aggiornato a fine gennaio 2008  è disponibile per lo scaricamento a questo indirizzo:
Alcune informazioni sui files:
- campi separati da tabulazione hex: 09
- righe separate dal terminatore di riga windows hex: 0d0a
- intestazione colonne sulla prima riga
Il file TabAbi contiene i dati relativi alle banche.
Il file TabAbiCab contiene le informazioni relative agli sportelli
Nel file TabAbi e TabAbiCab è presente il campo "Aggiornamento" che evidenzia la data di riferimento di validità dei dati.
Tutte le righe di TabAbiCab che NON contengono la data più recente sono da considerarsi relative a sportelli non più attivi o assorbiti da altre banche, tali sportelli sono presenti solo come log dei dati storici, ne è sconsigliato l'utilizzo per nuove emissioni di flussi di comunicazione con le banche.
Questo archivio è da considerarsi frutto di una rielaborazione "amatoriale" dei dati, si declina ogni responsabilità derivante dai danni causati dal suo uso.

Powerered with Window Live Write