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:
- Consolidarea datelor – in definitiv, Petre Ispirescu = ISPIRESCU Petre
- 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:
- Primul pas : instalarea software-ului free , in care downloadati VC# Express si SQL Server Express
- Stringuri de conexiune pentru orice baza de date : www.connectionstrings.com