Al patrulea pas : Importul datelor

 

Va sfatuim sa cititi partile anterioare

     Primul pas : instalarea software-ului free

    Al doilea pas : Analiza aplicatiei

    Al treilea pas : Structura Bazei de date

 

Sau tutorialul anterior despre .NET 2.0

        http://serviciipeweb.ro/iafblog/content/binary/tutorial.pdf

 

Vom importa datele din fisierul Excel in Baza de date. Daca am avea SQL Server Standard( sau mai mare) am putea importa direct din Excel in SQL Server.Este suficient sa facem click dreapta pe baza noastra de date , Tasks=> ImportData – ca in figura alaturata :

Dupa ce apasam, vom selecta la surse Excel:

Iar la destinatie serverul local de SQL Server

 

Cam asta ar fi, daca am avea SQL Server Standard.

Dar ,pentru ca avem SQL Server Express, nu avem o astfel de facilitate incorporata – asa ca va trebui sa ne descurcam importand datele cu un program in C#.

Vom creea tabele in SQL Server asemanatoare cu structura datelor din Excel. Vom crea tabelele asa cu am facut la pasul 3. De pilda tabela cu date despre cartile de copii va arata asa:

Acum vom importa datele. Va trebui sa facem citirea datelor in Excel si apoi scrierea lor in SQL Server.

Sa le luam pe rind:

Cream un nou proiect in C# , intitulat “ImportDate” de tip Consola in folder-ul C:\book3.

Linga toate “using” mai adaugam si un “using System.Data.OleDb;” ca sa putem citi din Excel si using System.Data.SqlClient pentru conectare la SQL Server.

O sa ne folosim de faptul ca DataAdapter stie sa faca modificari de date automat. Ne facem ca citim un DataTable din SQL Server, il umplem apoi cu datele de la Excel si ii spunem lui DataAdapter sa faca insert-urile pentru noi.

 

Deschidem o conexiune la SQL Server si citim datele din tabela “Excel_Copii”:

 

Pentru citirea din Excel vom folosi driverul de OLEDB.Cream o conexiune la Excel si o sa citim datele din tabela “Copii”.

Deschidem o conexiune la Excel

“Provider = \”Microsoft.Jet.OLEDB.4.0\”;Data Source=\”C:\\book3\\carte.xls\”;Extended Properties=\”Excel 8.0;HDR=Yes;IMEX=1\””;

(daca vreti sa stiti ce ISAM aveti , vedeti cu regedit cheia

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\ISAM Formats)

Deschidem o noua comanda, prin care selectam datele din Worksheetul “Copii”

oc.CommandText = “select * from [Copii$]”;

 

(de remarcat sintaxa cu $ si paranteze drepte)

Cod complet:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data.OleDb;

using System.Data.SqlClient;

using System.Data;

namespace ImportDate

{


class
Program

{


static
void Main(string[] args)

{


using (SqlConnection sco = new
SqlConnection())

{

sco.ConnectionString = “Data Source=.\\sqlExpress;Integrated Security=true;Initial Catalog=Library”;

 

sco.Open();


using (SqlDataAdapter sda = new
SqlDataAdapter(“select * from Excel_Copii”, sco))

{


// construct insert


if (sda.InsertCommand == null)

{


SqlCommandBuilder scb = new
SqlCommandBuilder(sda);

sda.InsertCommand = scb.GetInsertCommand(true);

}

System.Data.DataTable dtTransfer = new System.Data.DataTable();

sda.Fill(dtTransfer);

 

 

 

 


using (OleDbConnection odc = new
OleDbConnection())

{

odc.ConnectionString = “Provider = \”Microsoft.Jet.OLEDB.4.0\”;Data Source=\”C:\\book3\\carte.xls\”;Extended Properties=\”Excel 8.0;HDR=Yes;IMEX=1\””;

odc.Open();


using (OleDbCommand oc = new
OleDbCommand())

{

oc.CommandType = System.Data.CommandType.Text;

oc.CommandText = “select * from [Copii$]”;

oc.Connection = odc;


//fill data table with Excel data

System.Data.DataTable dtExcel = new System.Data.DataTable();


using (OleDbDataReader sr = oc.ExecuteReader())

{

dtExcel.Load(sr);

}

 


// transfer rows


foreach (DataRow dr in dtExcel.Rows)

{

 


DataRow drNew = dtTransfer.NewRow();

drNew.ItemArray = dr.ItemArray;

dtTransfer.Rows.Add(drNew);

}

}

 

 

sda.Update(dtTransfer);

}

}

}

}

}

}

 

La fel se importa si datele din tabela de SF.

Acum este cazul sa importam datele in tabele.

Mai intii, cea de autori.

Va trebui sa luam autorii din toate tabelele .

 

SELECT

[Autor1] as autor


FROM [Library].[dbo].[Excel_Copii]

union

select [Autor2]

FROM [Library].[dbo].[Excel_Copii]

UNION

SELECT

[Autor1] as autor


FROM [Library].[dbo].[Excel_SF]

union

select [Autor2]


FROM [Library].[dbo].[Excel_SF]

 

Observam urmatoarele date:

NULL

ISPIRESCU Petre

Andersen

George Lucas

Ion Creanga

Isaac Asimov

Petre Ispirescu

 

 

Va trebui sa facem 2 lucruri:

  1. Consolidarea datelor – in definitiv, Petre Ispirescu = ISPIRESCU Petre
  2. Inserarea in tabela Person si Tabela Author

Punctul 1 este destul de usor de facut cu un update …

update Excel_Copii set Autor1=
‘Petre Ispirescu’
where Autor1 =
‘ ISPIRESCU Petre’

Punctul 2 il vom face inserind in tabela de persoane si pe urma in tabela de Autori

INSERT
INTO [Library].[dbo].[Person]


([FirstNamePerson],[LastNamePerson]


)

 

select autor,
from

(

SELECT

[Autor1] as autor


FROM [Library].[dbo].[Excel_Copii]

union

select [Autor2]

FROM [Library].[dbo].[Excel_Copii]

UNION

SELECT

[Autor1] as autor


FROM [Library].[dbo].[Excel_SF]

union

select [Autor2]


FROM [Library].[dbo].[Excel_SF]

 

) a where a.autor is
not
null

Acum separam nume de prenume:

UPDATE

    Person

SET

    FirstNamePerson =
substring(FirstNamePerson,1,charindex(‘ ‘
,FirstNamePerson)-1),

    LastNamePerson =
substring(FirstNamePerson,charindex(‘ ‘
,FirstNamePerson)+1,100)

WHERE
charindex(‘ ‘
,FirstNamePerson)>0

Rezultatul este:

IDPerson    FirstNamePerson    LastNamePerson    DateOfBirthPerson

2    Andersen        NULL

3    George    Lucas    NULL

4    Ion    Creanga    NULL

5    Isaac    Asimov     NULL

6    Petre    Ispirescu    NULL

 

Acum le vom insera in tabela de Autori:

INSERT
INTO

    [Author]


([IDPerson]


)


SELECT IDPerson FROM Person

 

La fel inseram cartile si editurile..

Acum trebuie sa refacem legaturile, de pilda, intre autori si carti

    INSERT
INTO [Book_Author]


([IDBook]


,[IDAuthor])

 

select IDBOOK,IDAuthor from Book b

inner
join Excel_SF excel

inner
join Person p on excel.Autor1 = p.FirstNamePerson +
‘ ‘
+ p.LastNamePerson

inner
join Author a on p.IDPerson = a.IDPerson

on excel.Titlu = b.Title

 

La fel si pentru carti cu edituri :

update book

set IDPrintingHouse =

p.IDPrintingHouse from Book b

inner
join Excel_SF excel

inner
join PrintingHouse p on p.NamePrintingHouse = excel.Editura

on excel.Titlu = b.Title

Ramine la latitudinea cititorului exercitiul cu celelalte update-uri.

Backupul la BD il gasiti in folder-ul database si se numeste “lib_date_importExcel.bak” . Puteti face restore.

De citit:

  1. Primul pas : instalarea software-ului free , in care downloadati VC# Express si SQL Server Express
  2. Stringuri de conexiune pentru orice baza de date : www.connectionstrings.com

 

Surse

Tutorial PDF

        

 

Leave a Reply

Your email address will not be published. Required fields are marked *