Etichette

mercoledì 19 gennaio 2011

Come Creare velocemente un esportazione da un DB a CSV

Vorrei iniziare questa sezione informatica, in modo eclatante, per cui;


  •  non avendo il tempo di riscrivere un sistema operativo (è ovvio che non lo scrivo solo per questioni di tempo, per cui portate pazienza)
  •  non avendo potuto creare un  algoritmo di ordinamento che avesse un rapporto di complessità pari a "n"  (è ovvio che non lo scrivo perché non lo ritengo un esercizio valido, a chi potrebbe interessare???)
  •  non avendo  voluto cercare di rompere l'algoritmo RSA a 2048 bit (per i troppi rischi connessi, che questo provocherebbe  sia alla mia persona fisica, sia il livello destabilizzazione  di alcune certezze oramai cardinate nella nostra cultura informatica)
Mi sono preso l'incarico di fornirvi un pezzetto di codice  di livello molto basso,  ma dico molto basso,  e proveniente da un esigenza ancestrale, che prima o poi tutti hanno durante la loro dita da informatici.

Produrre un file csv da una query.

Linguaggio C#:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace CreaFileCSV
{
    public partial class sql2CSV 
    {
        public SqlDataReader rs;
        string pathEsecuzione = "";
        string NomeFile = "";
        string sqlquery = "";
        public sql2CSV()
        {
           
        }

        

        private void ScriviFile()
        {
            string output = "";
            FileInfo miofile = new FileInfo(NomeFile);
            StreamReader sr ;
            sr = miofile.OpenText();
            while (sr.EndOfStream == false)
            {
                sqlquery = sr.ReadToEnd();
            }
            string separator = ";";
            string conn = @"Data Source=NOME_SERVER;Initial Catalog=NOME_DB;User Id=user1;Password=user1;";
            SqlConnection cn = new SqlConnection(conn);
            cn.Open();
            SqlCommand cm = new SqlCommand(sqlquery, cn);
            rs = cm.ExecuteReader();
            //INTESTAZIONE
            for (int i = 0; i < rs.FieldCount; i++)
            {
                output += rs.GetName(i) + separator;
            }
            output += Environment.NewLine;
            //RECORD
            while (rs.Read())
            {
                for (int i = 0; i < rs.FieldCount; i++)
                {
                    string p = rs.GetFieldType(i).ToString();
                    if (rs.GetFieldType(i).ToString().Contains("String"))
                        if (rs.IsDBNull(i))
                            output += separator;
                        else
                            output += rs.GetString(i) + separator;
                    else if (rs.GetFieldType(i).ToString().Contains("Decimal"))
                        output += rs.GetDecimal(i) + separator;
                    else if (rs.GetFieldType(i).ToString().Contains("Double"))
                        output += rs.GetDouble(i) + separator;
                    else
                        output += rs.GetInt32(i) + separator;
                }
                output += Environment.NewLine;
            }
            File.WriteAllText(pathEsecuzione, output.ToString());
        }

        
    }
}

Ovviamente il codice è altamente instabile, percui se qualcuno volesse segnalarmi errori, sarò ben lieto  di modificare il mio codice, secondo i vostri suggerimenti.


ATTENZIONE:
Sembra che tutto funzioni.... ma provate a compilarlo!!!
Ci sono dei pezzi di codice che definirei  imbarazzanti, per come sono scritti.


Si raccomando i lettori di seguire i link ipertestuali inseriti nel testo, per avere una panoramica piu esatta di cio che si sta parlando.

3 commenti:

  1. dalla serie o uno te dice che va bene o niente? che ne dici di inserire anche le diciture tipo: inutile- superfluo- brutto-.....diamo una parvenza di democraticità, capisco che non è di moda in questo paese....ma si può fare... AcerGreen

    RispondiElimina
  2. Carissima AcerGreen
    ci ho messo 10 minuti esatti per capire che stavi riferendoti alle reazioni che l'articolo puo portare e non all'articolo in se stesso.

    Cmq il Mio ego non resisterebbe a un commento di tipo inutile superfluo brutto!! percui tra le reazioni mi sa che non troverai mail quel checkbox

    RispondiElimina
  3. io c'ho messo un'ora a cercare di capire cosa fosse un CSV! ma dopo la tua esaustiva spiegazione l'informatica per me non ha più segreti!

    RispondiElimina