Vous êtes sur la page 1sur 55

Automne 2016 SQL Server par la

pratique
Introduction

Saliha Yacoub
COLLEGE LIONEL-GROULX
Table des matires
Introduction :.........................................................................................................................3
Installation :...........................................................................................................................4
Connexion et cration de la BD............................................................................................. 10
tape 1 ............................................................................................................................. 10
tape 2 : Crer une nouvelle connexion.............................................................................. 12
tape 3 : Attribuer les rles ............................................................................................... 13
tape 4 Crer une nouvelle base de donnes : ................................................................... 16
O est stocke la base de donnes ? .................................................................................. 20
Cration des tables .............................................................................................................. 23
Types de donnes ............................................................................................................. 23
La proprit Indentity dune table ................................................................................ 24
Utilisation de linterface graphique pour crer des tables. ................................................... 25
Cration des tables avec SQL ............................................................................................. 25
Les procdures stockes ....................................................................................................... 28
Exemple1 : Tous les paramtres sont en IN. ........................................................................ 28
Exemple 2 : Les paramtres en IN avec une sortie (SELECT) ................................................. 29
Exemple 3 : Procdure avec un paramtre en OUTPUT ........................................................ 30
Les fonctions : Fonction qui retourne une table .................................................................. 30
Les fonctions : Fonction qui retourne un scalaire ................................................................ 31
En conclusion pour les procdures et les fonctions. ............................................................. 32
Les procdures stockes et les fonctions : les templates. ..................................................... 33
Application: ADO.Net, les DataSet Typ ................................................................................ 35
Connexion la base de donnes : .......................................................................................... 35
Utiliser linterface graphique pour se connecter, puis App.config............................................. 36
Appels des procdures et fonctions ....................................................................................... 38
Procdures stockes ......................................................................................................... 38
Fonction qui retourne une table......................................................................................... 39
Fonction qui retourne un scalaire....................................................................................... 40
Le DataSet typ.................................................................................................................... 41
Dfinition ............................................................................................................................. 41
Mise en uvre ..................................................................................................................... 42
Exemple de code : ................................................................................................................ 45

1
Saliha Yacoub
Configurer le TableAdapter. .................................................................................................. 51
Sources ................................................................................................................................ 54

2
Saliha Yacoub
Introduction :
Microsoft SQL Server est un Systme de gestion de base de donnes relationnel et
transactionnel dvelopp et commercialis par Microsoft.

Microsoft SQL Server utilise le langage T-SQL (Transact-SQL) pour ses requtes, c'est une
implmentation de SQL qui prend en charge les procdures stockes et les
dclencheurs. La dernire version est SQL Server 2016. La premire ayant appartenu
Microsoft seul est en 1994. (Contrairement Oracle qui sort la premire version en
1979 voir 1977)

3
Saliha Yacoub
Installation :
La documentation qui montre linstallation de SQL Server 2014 avec Management
Studio. Il montre les tapes principales.

Lorsque vous dmarrez linstallation de SQL Server 2014, celui-ci vous demandera si
vous vous voulez faire une mise niveau dune version dj existante (de SQL server
2008-- SQL Server 2012 SQL Server 2014) ou une nouvelle installation autonome. Une
fois que vous avez choisi loption Nouvelle installation, la figure suivante saffiche.
.

videment il faudra accepter le contrat de licence. Par la suite cocher Utiliser Micosoft
Update pour la recherche des mise jour ..

4
Saliha Yacoub
Cliquez sur suivant : la fentre montrant les fonctionnalits installer saffiche.

Vrifier que lensemble des fonctionnalits est coch. (en particulier le moteur de bases
de donnes).

5
Saliha Yacoub
Cliquez sur suivant.

Choisir loption instance nomme de la figure suivante. Si vous avez une version de SQL
Server dj installer ne donner pas le mme nom cette instance.

Vous pouvez donner le nom MSSQL2014 .


Cest avec cette instance que vous allez retrouver les services dmarrer si jamais votre
service nest pas dmarr automatiquement.

6
Saliha Yacoub
Cliquez sur suivant. La fentre suivante montre les services ainsi que le mode de
dmarrage. Vrifiez surtout que le moteur de Bases de donnes soit automatique.

7
Saliha Yacoub
Cliquez sur suivant.

La figure suivante montre le mode dauthentification.


Authentification Windows. Si vous choisissez ce mode dauthentification, cela veut dire
que le serveur de base de donnes lorsque vous essayez de vous connecter ne vous
demandera pas de mot de passe. Si vous choisissez ce mode dauthentification
linstallation, vous allez devoir la changer pour grer votre serveur. Lusager (sa : pour
systme administration e) est dsactiv.
Authentification Mixte, en plus de lauthentification Windows, vous avez
lauthentification SQL server. Il faudra alors donner un mot de passe pour sa (systme
administration). Pour une installation autonome sur vos propres ordinateurs, je vous
recommande ce mode dauthentification.

Cliquez sur suivant et vous aurez ceci :

Il faudra choisir installer et configurer

8
Saliha Yacoub
Cette opration prend quelques minutes. Soyez patient Vrifiez que tout est OK.

9
Saliha Yacoub
Connexion et cration de la BD
Dmarrer SQL Server Management Studio

tape 1 : Changer le mode dauthentification


Faire une authentification Windows. (Vous navez pas encore de compte sur le Serveur
SQL server)

Le nom du serveur est le nom de votre ordinateur\nom de linstance.

Une fois que vous tes log allez

10
Saliha Yacoub
Bouton droit sur votre
serveur, puis proprit
Securit

Puis choisir Mode dauthentification Windows. Faites OK. Redmarrer le serveur.


(Bouton droit puis redmarrer.).

11
Saliha Yacoub
tape 2 : Crer une nouvelle connexion
Sur le bouton droit de votre

Choisir Authentification SQL Server.


Donner un nom sans caractres spciaux et sans accents
Donner un nom significatif
Choisir un mot de passe qui respecte la stratgie des mots de passe Windows
Server

12
Saliha Yacoub
Dcocher lutilisateur doit changer le mot de passe.
Vous pouvez dcocher la case Conserver la stratgie des mot de passe. Mais ce
nest pas conseill.
Comme vous navez pas de base de donnes, la connexion utilise la Base de
donnes par dfaut qui master.

tape 3 : Attribuer les rles


Pour pouvoir crer votre propre base de donnes vous devez possder les droits
ncessaires. (ou le rles).

Si vous tes administrateur alors vous avez dj ces rles, sinon vous devez les attribuer
votre connexion avant de crer la bd.

Pour crer la base de donnes vous devez avoir au moins le rle sysadmin

Pour donner les droits votre connexion, allez votre connexion, Bouton droit,
proprit puis rle du serveur

13
Saliha Yacoub
Rles Descriptif
bulkadmin Les membres du rle serveur fixe bulkadmin
peuvent excuter l'instruction BULK INSERT
(La tche d'insertion en bloc est le moyen
le plus rapide pour copier de gros volumes
de donnes dans une table ou une vue SQL
Server).

Dbcreator Les membres du rle de serveur fixe


dbcreator peuvent crer, modifier, supprimer
et restaurer n'importe quelle base de
donnes.

diskadmin Les membres du rle de serveur fixe


diskadmin peuvent grer les fichiers de base
de donnes.

processadmin Les membres du rle de serveur fixe


processadmin peuvent grer les processus
SQL Server.

14
Saliha Yacoub
securityadmin Les membres du rle serveur fixe
securityadmin grent les connexions et leurs
proprits. Ils peuvent accorder (GRANT),
refuser (DENY) et rvoquer (REVOKE)
les autorisations de niveau serveur. Ils
peuvent galement accorder (GRANT),
refuser (DENY) et rvoquer (REVOKE) les
autorisations de niveau base de donnes.
En outre, ils peuvent redfinir les mots de
passe des connexions SQL Server.

Serveradmin Les membres du rle serveur fixe


serveradmin peuvent modifier les options de
configuration l'chelle du serveur et arrter
le serveur.

Setupadmin Les membres du rle de serveur fixe


setupadmin peuvent ajouter et supprimer
des serveurs lis, ainsi qu'excuter certaines
procdures stockes systme.

sysadmin Les membres du rle fixe sysadmin peuvent


effectuer toute activit sur le serveur.

Vous pouvez vous dconnecter du serveur et vous reconnecter avec votre nouvelle
connexion (SQL Server) comme suit.

15
Saliha Yacoub
tape 4 Crer une nouvelle base de donnes :

Aprs vous tre connect avec votre nouvelle connexion ayant au moins le droit
sysadmin, placez-vous longlet base de donnes, puis nouvelle base de donnes

Avant de cliquer sur OK, cliquer sur propritaire, puis sur le bouton parcourir. Cochez les
utilisateurs (les connexions que vous voulez quils soient propritaires, puis OK, puis OK

16
Saliha Yacoub
Aprs la cration de la base de donnes, nous allons faire en sorte que le login pointe
directement sur la nouvelle base de donnes

Sous longlet Scurit, droulez les connexions. Reprerez la vtre. Puis bouton droit de
la souris et Proprits.

Choisir ensuite le nom de la BD par dfaut. Tester nouveau votre connexion.

17
Saliha Yacoub
Toutes les connexions que nous venons de crer appartiennent un lutilisateur par
dfaut dbo

Une connexion est lie la notion de connexion avec mot de passe (stock dans la table
unique master syslogins) qui permet davoir accs au serveur de base de donnes.

Un utilisateur d'une base de donnes est li une connexion. Un utilisateur est associ
une ou plusieurs bases de donnes. Nous pouvons avoir plusieurs utilisateurs pouvant
se partager la mme connexion. Stock dans les diverses tables sysusers (une dans
chaque base)
Nous pouvons crer galement une connexion en mme temps que lusager associ
cette connexion.
On utilise les mmes tapes que pour crer une connexion. Cette fois la connexion est
mappe avec un utilisateur. La connexion sappelle user1 le nom de lusager aussi.

18
Saliha Yacoub
Rles Description
db_accessadmin Les membres peuvent ajouter ou supprimer
l'accs des connexions Windows, des
groupes Windows et des connexions SQL
Server.

db_backupoperator Les membres du rle de base de


donnes fixe db_backupoperator peuvent
sauvegarder la base de donnes.

db_datareader Les membres du rle de base de donnes


fixe db_datareader peuvent lire toutes les
donnes de toutes les tables utilisateur.

19
Saliha Yacoub
db_datawriter Les membres du rle de base de donnes
fixe db_datawriter peuvent ajouter,
supprimer et modifier des donnes dans
toutes les tables utilisateur.

ddladmin Les membres du rle de base de donnes


fixe db_ddladmin peuvent excuter n'importe
quelle commande DDL (Data Definition
Language) dans une base de donnes.

db_denydatareader Les membres du rle de base de donnes


fixe db_denydatareader ne peuvent lire
aucune donne des tables utilisateur d'une
base de donnes.

db_denydatawriter Les membres du rle de base de donnes


fixe db_denydatawriter ne peuvent ajouter,

db_owner : propritaire de la base de donnes. A tous les droits sur


celle-ci

O est stocke la base de donnes ?


En cliquant sur le bouton droit de votre base de donnes, puis proprits longlet
fichier vous allez trouver les deux fichiers de la bd et leu emplacement.

C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQL2012\MSSQL\DATA.


Vous y trouverez deux types de fichiers pour chaque BD. Un .mdf et lautre .ldf

Les donnes sont stockes dans un fichier MDF, toutes les transactions, les
modifications de la base de donnes SQL Server effectues par chaque transaction sont
stockes dans un fichier LDF
PatocheBd.mdf et PatocheBd_log.ldf

20
Saliha Yacoub
Ce sont ces deux fichiers qui vous permettent de faire un Backup complet de votre base
de donnes.

Vous pouvez galement aller rcuprer une BD par :

Bouton droit sur Bases de donnes, puis Joindre. Vous aurez la fentre suivante.

Puis cliquez sur le bouton Ajouter et choisir la BD que vous voulez joindre.

21
Saliha Yacoub
Attention :
Lorsque vous essayez de joindre une Base de donnes dj jointe, cela provoquera une
erreur.
Il faut que vos fichiers soient dans le bon dossier.

22
Saliha Yacoub
Cration des tables
Types de donnes

Numerics Exact

Type partir de
bigint -9.223.372.036.854.775.808 9.223.372.036.854.775.807
int -2147483648 2147483647
smallint -32.768 32.767
tinyint 0 255
bit 0 1
dcimale -10 ^ 38 1 10 ^ 38 -1
numrique -10 ^ 38 1 10 ^ 38 -1
money -922,337,203,685,477.5808 +922,337,203,685,477.5807
SMALLMONEY -214,748.3648 +214,748.3647
Numriques et dcimales sont fixes de prcision et l'chelle des types de donnes et
sont fonctionnellement quivalents.

Numerics approximatif

Type partir de
float 1,79 E + 308- 1,79 E + 308
reel -3.40E + 38 3.40E + 38

datetime et SMALLDATETIME

Type partir de
datetime (3,33 exactitude millisecondes) 1 janvier 1753 31 dc 9999
SMALLDATETIME (prcision de 1 minute) 1 janvier 1900 6 juin 2079

Chanes de caractres

Type Description
De longueur fixe de caractres Unicode donnes non avec une longueur
char
maximum de 8000 caractres.
De longueur variable Unicode donnes non avec un maximum de 8000
varchar
caractres.

23
Saliha Yacoub
varchar De longueur variable Unicode donnes non d'une longueur maximale de
(max) 231 caractres (SQL Server 2005 uniquement).
De longueur variable Unicode donnes non avec une longueur maximale de
text
2147483647 caractres.

Les chanes de caractres Unicode

Type Description
la longueur de donnes Unicode-fixe avec une longueur maximale de 4000
nchar
caractres.
la longueur de donnes Unicode et variable, avec une longueur maximum
nvarchar
de 4000 caractres.
nvarchar longueur Unicode donnes variables avec une longueur maximale de
(max) 230 caractres (SQL Server 2005 uniquement).
la longueur de donnes Unicode et variable, avec une longueur maximale
ntext
de 1073741823 caractres.

Binary Cordes

Type Description
De longueur fixe des donnes binaires d'une longueur maximale de 8000
binaire
octets.
De longueur variable des donnes binaires d'une longueur maximale de
varbinary
8000 octets.
varbinary De longueur variable des donnes binaires d'une longueur maximale de
(max) 231 octets (SQL Server 2005 uniquement).
De longueur variable des donnes binaires d'une longueur maximale de
image
2147483647 octets.

La proprit Indentity dune table

Vous pouvez mettre en uvre des colonnes d'identification l'aide de la proprit


IDENTITY. Ce qui permet de raliser un auto_increment sur une colonne.

Vous ne pouvez pas modifier une colonne de table existante et y ajouter la


proprit IDENTITY.

24
Saliha Yacoub
Lorsque vous utilisez la proprit IDENTITY pour dfinir une colonne d'identification,
tenez compte des lments suivants :

Une table ne peut comprendre qu'une colonne dfinie l'aide de la proprit


IDENTITY, et cette colonne doit tre dfinie l'aide d'un type de
donnes decimal, int, numeric,smallint, bigint ou tinyint.
Vous pouvez spcifier la valeur de dpart et l'incrment. La valeur par dfaut est 1
dans les deux cas.
La colonne d'identification ne doit ni accepter les valeurs NULL, ni contenir une
dfinition ou un objet DEFAULT. En gnral cest la cl primaire.
La colonne peut tre rfrence dans une liste de slection par l'emploi du mot
cl $IDENTITY aprs la dfinition de la proprit IDENTITY. La colonne peut
galement tre rfrence par son nom.
SET IDENTITY_INSERT peut tre utilis pour dsactiver la proprit IDENTITY d'une
colonne en activant les valeurs insrer explicitement.

Exemple :
La numrotation automatique commence 10 et elle est pas de 2.

create table ClientsInfo


(
numcl smallint IDENTITY(10,2),
nomcl varchar(30),
constraint pkcl primary key (numcl)
);

insert into Clientsinfo (nomcl) values ('Gavroche');

Utilisation de linterface graphique pour crer des tables.


Ltudiant peut dcouvrir par lui-mme linterface graphique pour la cration des tables
Voir le cours de mon collgue et ami Denis Brunet.

Cration des tables avec SQL


Les mmes syntaxes sappliquent la cration de tables avec SQL Server.

25
Saliha Yacoub
Exemple : Dans lexemple qui suit remarquez la colonne identity et le type money

create table programmes


(codep char(3),
nomprogramme varchar(30),
constraint pkprg primary key(codep)
);

create table etudiants


(
numad int identity primary key,
nom varchar(20),
prenom varchar(30),
salaire money,
codep char(3),
constraint fkprg foreign key(codep)
references programmes(codep)
);

Remarque1 : Avec SQL server on peut dfinir un seul INSERT INTO et donner la lise des
valeurs.

insert into programmes values


('inf','Informatique'),
('tge','Techniquw de genie'),
('ele','Electronique'),
('sim','Sciences maths info');

Pour excuter un commit aprs une opration DML, il faut mettre lopration entre

begin transaction
oprations DML

commit;

26
Saliha Yacoub
Exemple

begin transaction
insert into etudiants (nom, prenom,salaire,codep) values
('Patoche','Alain',12.33,'tge');
insert into etudiants (nom, prenom,salaire,codep) values
('Gavroche','Miserable',1.33,'inf');
insert into etudiants (nom, prenom,salaire,codep) values
('Bien','Henry',18.33,'inf');
insert into etudiants (nom, prenom,salaire,codep) values
('Leriche','Alain',40.00,'inf');
commit;

En gnral, lensemble des contraintes que nous avons vues avec ORACLE se dfinissent
de la mme faon avec SQL Server.

alter table etudiants add constraint


cksal check(salaire>1);

27
Saliha Yacoub
Les procdures stockes
Les procdures stockes et les fonctions font partie du langage Transact-SQL (quivalent
de PL/SQL dORACLE). Transact-SQL est lorigine une proprit de Sybase.(aujourdhui
Transact-SQL est propritaire de Microsoft aussi. Ce dernier a pass des accords avec le
concurrent direct d Oracle de lpoque vers les annes 1989)

Transct-SQL est un langage procdural. La dfinition de procdures stockes a la mme


logique que dans ORACLE mais avec des syntaxes diffrentes.

Les exemples suivants illustrent la dfinition et lappel de procdures stockes.

Exemple1 : Tous les paramtres sont en IN.

create procedure insertionEtudiants


(
@pnom varchar(20), @pprenom varchar(30),@psal
money,@pcodep char(3)
)
AS
begin
insert into etudiants(nom , prenom ,salaire ,codep )
values (@pnom , @pprenom ,@psal ,@pcodep)
end;
go

Les paramtres sont prcds du symbole @


Le type de paramtre IN OUT est indiqu si le paramtre est en OUT ou INOUT
Excution

execute insertionEtudiants
@pnom ='Lenouveau',
@pprenom ='lenouveau',
@psal=22.5,
@pcodep ='sim';

28
Saliha Yacoub
Exemple 2 : Les paramtres en IN avec une sortie (SELECT)

create procedure lister


(
@pcodep char(3)
)
AS
begin
select * from etudiants where @pcodep = codep;
end;
go

Execution :

execute lister
@pcodep='inf';
Exemple 2

Drop procedure ChercherNom;

create procedure ChercherNom


(
@pnom varchar(20)
)
AS
begin
select * from etudiants where nom Like '%'+ @pnom +'%';
end;
go

Execution

execute ChercherNom
@pnom='Le';

29
Saliha Yacoub
Exemple 3 : Procdure avec un paramtre en OUTPUT
create procedure ChercherNom2
(
@pnum int,
@pnom varchar(20) out
)
AS
begin

select @pnom = nom


from etudiants where numad =@pnum;
end;
go

Execution

declare @pnum int =1;


declare @pnom varchar(20);
execute ChercherNom2
@pnum ,
@pnom output;
print @pnom;

Les fonctions : Fonction qui retourne une table

Create FUNCTION Cherchertousetudiants


(@pcodep char(3)) returns table
AS
return(
SELECT nom,prenom
FROM etudiants
WHERE @pcodep =codep
) ;
GO
Execution

declare @codep char(3);


set @codep='inf';
select * from Cherchertousetudiants(@codep);

30
Saliha Yacoub
Les fonctions : Fonction qui retourne un scalaire
Cas dune fonction sans paramtres :

create function compter() returns int


as
begin
declare @total int;
select @total = count(empno) from Employes;
return @total;
end
go

Appel de la fonction :

select dbo.compter();
drop function compter; permet de supprimer une fonction

Cas dune fonction avec paramtres

create function compteretudiants(@pcode char(3)) returns int


as
begin
declare @total int;
select @total = count(*) from Etudiants where codep =@pcode;
return @total;
end
go

select dbo.compteretudiants('inf');

drop function compteretudiants

31
Saliha Yacoub
En conclusion pour les procdures et les fonctions.
Pour les procdures et les fonctions les paramtres sont prcds de @
Le type IN est par dfaut.
Lorsque le paramtre est en OUT ou OUTPUT, il faudra lindiquer clairement.
Les procdures et sont termins par GO. Il nest cependant pas obligatoire.
Les fonctions peuvent retourner des tables. Elles ne comportent les mots
rservs BEGIN et END
Pour executer une procdure il faut utiliser execute ou exec
Pour executer une fonction il faut utiliser select nomuser.nomfonction
(valeur paramtres)
lexcution des procdures, laffectation des valeurs aux paramtres se fait
avec = pour les int et la fonction set pour les types text.
Vos fonctions et procdures se trouvent Programmabilit de la BD

32
Saliha Yacoub
Les procdures stockes et les fonctions : les templates.
Voici le code gnr par SQL Server lorsque vous essayer de crer une procdure ou une
fonction

================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
-- Add the parameters for the stored procedure here
<@Param1, sysname, @p1> <Datatype_For_Param1, , int> =
<Default_Value_For_Param1, , 0>,
<@Param2, sysname, @p2> <Datatype_For_Param2, , int> =
<Default_Value_For_Param2, , 0>
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here


SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO

33
Saliha Yacoub
Template function TABLE
-- ================================================
-- Template generated from Template Explorer using:
-- Create Inline Function (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the function.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE FUNCTION <Inline_Function_Name, sysname, FunctionName>
(
-- Add the parameters for the function here
<@param1, sysname, @p1> <Data_Type_For_Param1, , int>,
<@param2, sysname, @p2> <Data_Type_For_Param2, , char>
)
RETURNS TABLE
AS
RETURN
(
-- Add the SELECT statement with parameter references here
SELECT 0
)
GO

34
Saliha Yacoub
Application: ADO.Net
Le fournisseur de donnes SqlClient fait partie intgrante de .NET Framework. Pas
besoin dinstallation supplmentaire (comme ODAC ou ODP.NET) si vous voulez accder
votre base de donnes SQL Server par C#, VB.net ou ASP.Net.
Ce quil faut savoir:

On utilise des classes de nom diffrent quavec Oracle, mais ces classes
ont le mme rle

Pas besoin de rfrences supplmentaires.

Lespace de nom est System.Data.SqlClient;

Les classes sont : SqlConnection, SqlCommand etc..


La notion de DataSet reste la mme (on va voir plus loin les DataSet
Typs, qui sutilisent galement avec Oracle)

Connexion la base de donnes :


Pour la chaine de connexion, elle est de la forme: elle est toujours de la forme :

"Data source =votreserveur; Intial Catalog = nomBd; User Id = user; Passsword =pass

Exemple :

"data source= PYACOUBS\\MSSQL2012; Initial Catalog = PatocheBd; User Id = Patoche;


password =Patochepas";

SqlConnection sqlconnect = new SqlConnection();


string chaine = "data source= PYACOUBS\\MSSQL2012; Initial Catalog = PatocheBd; User
Id = Patoche; password =Patocheas";

sqlconnect.ConnectionString = chaine;

sqlconnect.Open();

35
Saliha Yacoub
Utiliser linterface graphique pour se connecter, puis App.config
On peut aussi utiliser linterface graphique pour obtenir la chaine de connexion et faire
rfrence cette chaine de connexion

Dans Visual Studio, bouton droit sur Connexions de donnes, puis ajouter une
connexion.

Entrer les informations de connexion votre serveur : Cliquez sur le bouton Modifier
pour chercher la source de donnes adquate (SqlClient de SQL Server).

Tester la connexion, puis OK


36
Saliha Yacoub
Une fois que vous tes connects, drouler la branche de votre serveur et voua allez voir le
contenu de votre base de donnes. (tables, procdures stockes, fonctions etc..)

Maintenant la connexion est tablie, comment rcuprer la c haine de connexion pour notre
projet C# ?. Rien de complique

Votre chaine de connexion, se trouve dans votre fichier App.config

<?xml version="1.0" encoding="utf-8" ?>


<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="SqldatasetType2.Properties.Settings.ConnectionString"
connectionString="Data Source=PYACOUBS\MSSQL2012;User
ID=Patoche;Password=remi2002"
providerName="System.Data.SqlClient" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>

37
Saliha Yacoub
Pour faire rfrence cette chaine de connexion la ConfigurationManager avec la
proprit ConnectionStrings (Obtient les donnes ConnectionStringsSection pour la
configuration par dfaut de l'application actuelle. Vous aurez besoin alors de rajouter la
rfrence system.configuration, puis lespace de nom System.Configuration (using
System.Configuration)

SqlConnection maConnexion = new SqlConnection();


string connexion =
ConfigurationManager.ConnectionStrings["SqldatasetType2.
Properties.Settings.ConnectionString"].ConnectionString;
maConnexion.ConnectionString = connexion;
maConnexion.Open();

Appels des procdures et fonctions


Les appels de procdures stockes se fait de la mme faon quavec Oracle. Cependant
il ny a pas le type RefCursor. Les paramtres du code C# doivent tre les mmes que
ceux de sql server. Pour plus de dtails consulter le cours ADO.Net sur mon site
http://salihayacoub.com/420Ked/Semaine%209/2014ADO.pdf

Procdures stockes
try {
cmliste.Connection = sqlconnect;
cmliste.CommandType = CommandType.StoredProcedure;
cmliste.CommandText = "lister";
SqlParameter pcode = new SqlParameter("@pcodep", SqlDbType.Char, 4);
pcode.Direction = ParameterDirection.Input;
pcode.Value = "inf";
cmliste.Parameters.Add(pcode);
// remplire le DataSet
SqlDataAdapter adapter = new SqlDataAdapter(cmliste);
adapter.Fill(mondataSet, "listeEtudiants");
//faire un bindingsource . La datagriView s'apelle dgvListe
BindingSource maSource = new BindingSource(mondataSet,
"listeEtudiants");
gvListe.DataSource = maSource;
}
catch (Exception ex1)
{
MessageBox.Show(ex1.Message.ToString());
}
}

38
Saliha Yacoub
Les objets SqlCommand, SqlConnection .. sont dclars comme suitL
SqlConnection sqlconnect = new SqlConnection();
SqlCommand cmajoutproc = new SqlCommand();
SqlCommand cmliste = new SqlCommand();
SqlCommand cm = new SqlCommand();
SqlCommand cmfuntable = new SqlCommand();
DataSet mondataSet = new DataSet();
Et la procdure tant :

create procedure lister


(
@pcodep char(3)
)
AS
begin
select * from etudiants where @pcodep = codep;
end;
go

Fonction qui retourne une table


Lappel dune fonction Table se fait par lexcution dune requte SELECT sur la fonction.
try
{
string sql = "Select * from Cherchertousetudiants (@pcoep)";
cmfuntable.Connection = sqlconnect;
cmfuntable.CommandType = CommandType.Text;
cmfuntable.CommandText = sql;
SqlParameter pcode = new SqlParameter("@pcoep", SqlDbType.Char, 3);
code.Value = "inf";
cmfuntable.Parameters.Add(pcode);

qlDataAdapter adapter = new SqlDataAdapter(cmfuntable);


adapter.Fill(mondataSet, "listeEmployes");
BindingSource maSource = new BindingSource(mondataSet,"listeEmployes");
dgvListe.DataSource = maSource;
}

catch (Exception ex2)


{
MessageBox.Show(ex2.Message.ToString());
}

39
Saliha Yacoub
La fonction Table tant la suivante:

Create FUNCTION Cherchertousetudiants


(@pcodep char(3)) returns table
AS
return(
SELECT nom,prenom
FROM etudiants
WHERE @pcodep =codep
) ;
GO

Fonction qui retourne un scalaire


Lappel de la fonction Scalaire se fait de la mme manire quavec Oracle. Il faudra

try
{
cm.Connection = sqlconnect;
cm.CommandType = CommandType.StoredProcedure;
cm.CommandText = "Compter";
SqlParameter tot = new SqlParameter("@tot", SqlDbType.Int);
tot.Direction = ParameterDirection.ReturnValue;

cm.Parameters.Add(tot);
cm.ExecuteScalar();
label1.Text = tot.Value.ToString();
}
catch (Exception ex3)
{
MessageBox.Show(ex3.Message.ToString());
}
}

create function compter() returns int


as
begin
declare @total int;
select @total = count(empno) from Employes;
return @total;
end
go

40
Saliha Yacoub
Le DataSet typ
Dfinition
Un DataSet typ est une classe drive d'un DataSet. En tant que tel, il hrite de
l'ensemble des mthodes, vnements et proprits d'un DataSet. En outre, un DataSet
typ fournit des mthodes, vnements et proprits fortement typs. Cela signifie que
vous pouvez accder des tables et des colonnes par leur nom au lieu d'utiliser les
mthodes associes des collections. Un DataSet typ permet non seulement
d'amliorer la lisibilit du code, mais aussi d'obtenir de l'diteur de code Visual
Studio .NET qu'il complte automatiquement les lignes mesure que vous les tapez.

Les DataSet typ rduisent considrablement la quantit de code pour leur exploitation.
Ils travaillent aussi en mode dconnect.

Les TableAdapters fournissent la communication entre votre application et une base de


donnes. Plus particulirement, un TableAdapter se connecte une base de donnes,
excute des requtes ou des procdures stockes sur la base de donnes et retourne
une nouvelle table de donnes remplie avec les donnes retournes ou remplit un
DataTable existant avec les donnes retournes. Les TableAdapters sont galement
utiliss pour renvoyer les donnes mises jour de votre application la base de
donnes.

Outre les fonctionnalits standards d'un DataAdapter, les TableAdapters fournissent des
mthodes types supplmentaires qui encapsulent des requtes partageant un schma
commun avec le DataTable typ associ. En d'autres termes, vous pouvez possder
autant de requtes que vous le souhaitez sur un TableAdapter aussi longtemps qu'elles
retournent des donnes respectant le mme schma.

Les TableAdapters utilisent des commandes de donnes pour lire et crire dans la base
de donnes. La requte Fill (principale) initiale du TableAdapter est utilise comme base
pour crer le schma de la table de donnes associe, ainsi que les commandes
InsertCommand, UpdateCommand et DeleteCommand associes la mthode
TableAdapter.Update. Cela signifie que l'appel la mthode Update d'un TableAdapter
excute les instructions cres lors de la configuration originale du TableAdapter, et
aucune des requtes supplmentaires ajoutes avec l'Assistant Configuration de
requtes TableAdapter.

Lorsque vous utilisez un TableAdapter, il effectue avec les commandes les mmes
oprations que vous pourriez effectuer vous-mme. Par exemple, lorsque vous appelez
la mthode Fill de l'adaptateur, celui-ci excute la commande de donnes de sa
proprit SelectCommand et utilise un lecteur de donnes (par exemple SqlDataReader)

41
Saliha Yacoub
pour charger le jeu de rsultats insr dans la table de donnes. De mme, lorsque vous
appelez la mthode Update de l'adaptateur, il excute la commande approprie (celle
des proprits UpdateCommand, InsertCommand et DeleteCommand) pour chaque
enregistrement modifi

Mise en uvre
Une fois votre projet Visual Studio cre, vous pouvez lui ajouter un DataSet Typ de la
faon suivante :

Bouton droit sur votre projet, puis ajouter un nouvel Element

Choisissez DataSet dans les lments Visual C#, puis donner un nom significatif puis
ajouter

42
Saliha Yacoub
Lorsque vous aurez cliqu sur ajouter, vous aurez alors, la figure suivante qui va vous
permettre dajouter des tables votre DataSet.

Cliquez sur explorateur de serveur

Si vous tes dj connect en utilisant linterface graphique et lexplorateur de serveurs,


vous aurez la liste de vos tables que vous pouvez glisser sur votre DataSet. Sinon, tablir
une connexion au serveur pour voir vos tables.

43
Saliha Yacoub
Remarquez aussi que dans lexplorateur de solution, vous avez les informations de votre
DataSet

44
Saliha Yacoub
On va sintresser aux tables de notre DataSet (DataSetType1.xsd)

1. Les tables lies dans la base de donnes sont lies sont lies dans le DataSet.
2. Les tables ont leurs propre DataAdapter. Ce sont des TableAdapter.
a. EmployesTableAdapter pour la table Employes
b. etudiantsTableAdapter pour la table etudiants
c. programmesTableAdapter pour la table programmes
3. etudiants et programmes sont remplies par la methode Fill avec un SELECT.
4. Employes est remplie par une procdure stocke dont le paramtre est @code.

5. Surtout, il ne faut pas perdre de vue quun DataSet Typ est avant tout un
DataSet. Ce qui veut dire quon utilise la mthode Fill dun DataAdapter pour le
remplir et la mthode Update pour la mise jour du DataSet et de la base de
donnes. Pour les dtails concernant le fonctionnement dun DataSet voir
http://salihayacoub.com/420Ked/Semaine%209/2014ADO.pdf
Toutes les mthodes et proprits dun DataSet sapplique un DataSet Typ.

Exemple de code :
La figure suivante montre lutilisation de DataSet Typ.
Les boutons prcds de la lettre T utilise les TableAdapter.
Nous avons exemple de procdure appel par un TabeleAdapter.
Nous avons un DataAdapter (tel que nous lavons dj vu en S3, et S4). Dans cet
exemple le DataAdapter travaille en mode connct.
Dans tout lexemple, on utilise un DataSet Typ,

45
Saliha Yacoub
Voici la section de dclaration :

// DataSetType1 est mon DataSet moi.


DataSetType1 ds = new DataSetType1();
SqlConnection maConnexion = new SqlConnection();
SqlCommand cmliste = new SqlCommand();
SqlCommand cmmodifier = new SqlCommand();
SqlCommand cmajouter = new SqlCommand();
SqlCommand cmsupprimer = new SqlCommand();
etudiantsTableAdapter adapteretudiants = new etudiantsTableAdapter();
EmployesTableAdapter empadapetr = new EmployesTableAdapter();
SqlDataAdapter adapter = new SqlDataAdapter();

Voici le code de chacun des boutons

// tablir la connexion : Ncessaire pour le prochain code

private void connect_Click(object sender, EventArgs e)


{
string connexion =
ConfigurationManager.ConnectionStrings["SqldatasetType2.Properties.Settings.Co
nnectionString"].ConnectionString;
maConnexion.ConnectionString = connexion;
maConnexion.Open();
MessageBox.Show(maConnexion.State.ToString());
}

46
Saliha Yacoub
// appel dune procdure stocke avec un SqlDataAdapter et la
mthode Fill()
// nous avons dj vu ce code avec Oracle
private void afficher_Click(object sender, EventArgs e)
{
try
{
cmliste.Connection = maConnexion;
cmliste.CommandType = CommandType.StoredProcedure;
cmliste.CommandText = "lister";
SqlParameter pcode = new SqlParameter("@pcodep", SqlDbType.Char, 4);
pcode.Direction = ParameterDirection.Input;
pcode.Value = "inf";
cmliste.Parameters.Add(pcode);

// on rempli le DataSet
SqlDataAdapter adapter = new SqlDataAdapter(cmliste);
adapter.Fill(ds, "etudiants");
// puisque mon DataSet est typ alors je peux faire ceci.
string nomp = ds.etudiants[2].nom;
textNom.Text = nomp;
// on fait un BindingSource sur le DatagridView
BindingSource maSource = new BindingSource(ds, "etudiants");
dgvEtudiants.DataSource = maSource;
}

catch (Exception ex)


{
MessageBox.Show(ex.Message.ToString());
}
}

// appel dune procdure stocke avec SqlCommand et


ExecuteNonQuery(). Insertion dans la base de donnes
nous avons dj vu ce code avec Oracle (bouton ajouter).
Ici on ne va pas utiliser la commande Update() de SqlDataAdater

47
Saliha Yacoub
private void ajouter_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("insertionEtudiants", maConnexion);
cmd.CommandText = "insertionEtudiants";
cmd.CommandType = CommandType.StoredProcedure;

SqlParameter pNom = new SqlParameter("@pnom", SqlDbType.VarChar, 30);


pNom.Direction = ParameterDirection.Input;

SqlParameter pPrn= new SqlParameter("@pprenom", SqlDbType.VarChar, 30);


pPrn.Direction = ParameterDirection.Input;

SqlParameter pSal = new SqlParameter("@psal", SqlDbType.Decimal, 3);


pSal.Direction = ParameterDirection.Input;

SqlParameter pCode = new SqlParameter("@pcodep", SqlDbType.Char, 3);


pCode.Direction = ParameterDirection.Input;
pNom.Value = texNom.Text;
pPrn.Value = textprn.Text;
pSal.Value = textsal.Text;
pCode.Value = textcode.Text;

cmd.Parameters.Add(pNom);
cmd.Parameters.Add(pPrn);
cmd.Parameters.Add(pSal);
cmd.Parameters.Add(pCode);
cmd.ExecuteNonQuery();
}

// appel dune procdure stocke avec SqlCommand et


ExecuteNonQuery(). Insertion dans la base de donnes
Ici on va utiliser la commande Update() de SqlDataAdater

Maintenant pour mettre jour la base de donnes avec le DataAdapter il suffit


dappeler explicitement ses mthodes qui sont :
InsertCommand,UpdateCommand,DeleteCommand suivi de la mthode Update(du
Dataset).

48
Saliha Yacoub
private void sauvegarder_Click(object sender, EventArgs e)
{
try
{
//modification
cmmodifier.Connection = maConnexion;
cmmodifier.CommandType = CommandType.StoredProcedure;
cmmodifier.CommandText = "modifetudiant";
adapter.UpdateCommand = cmmodifier;
cmmodifier.Parameters.Add("@pno",SqlDbType.Int, 3, "numad").Direction =
ParameterDirection.Input;
cmmodifier.Parameters.Add("@pcode", SqlDbType.Char, 3, "codep").Direction
= ParameterDirection.Input;
//insertiom
cmajouter.Connection = maConnexion;
cmajouter.CommandType = CommandType.StoredProcedure;
cmajouter.CommandText = "insertionEtudiants";
adapter.InsertCommand = cmajouter;
cmajouter.Parameters.Add("@pnom", SqlDbType.VarChar, 30, "nom").Direction =
ParameterDirection.Input;
cmajouter.Parameters.Add("@pprenom", SqlDbType.VarChar, 30,
"prenom").Direction = ParameterDirection.Input;
ajouter.Parameters.Add("@psal", SqlDbType.Decimal, 3, "salaire").Direction
= ParameterDirection.Input;
cmajouter.Parameters.Add("@pcodep", SqlDbType.Char, 3,
"codep").Direction = ParameterDirection.Input;
//suppresion
cmsupprimer.Connection = maConnexion;
cmsupprimer.CommandType = CommandType.StoredProcedure;
cmsupprimer.CommandText = "deleteetudiant";
adapter.DeleteCommand = cmsupprimer;
cmsupprimer.Parameters.Add("@pno", SqlDbType.Int, 3,
"numad").Direction = ParameterDirection.Input;

//sauvegarde le DataSet et la BD
adapter.Update(ds.etudiants);
}

catch (Exception exinsertex)


{
MessageBox.Show(exinsertex.Message.ToString());
}
}

49
Saliha Yacoub
Dans ce qui suit, on utilise un DataAdapter sans connexion (car il est
configurer pour appeler une procedure).

Tout le code qui suit, vous navez pas besoin de connexion. Ce nest
pas lidal et ce nest pas conseill. Il faut cependat savoir que
est faisable.

Et voici le code qui permet dappeler la procdure. (pas besoin du


bouton connecter). Il manque le try catch()

// appel d'une procdure stocke


private void button1_Click(object sender, EventArgs e)
{
empadapetr.Fill(ds.Employes, "info");
BindingSource laSource = new BindingSource(ds, "Employes");

dataGridView1.DataSource = laSource;
}

// code du bouton Tafficher


private void tafficher_Click(object sender, EventArgs e)
{
adapteretudiants.Fill(ds.etudiants);
BindingSource maSource = new BindingSource(ds, "etudiants");
dgvEtudiants.DataSource = maSource;

string nomp = ds.etudiants[2].nom;


textNom.Text = nomp;
}

// code du bouton Tajouter


private void tajouter_Click(object sender, EventArgs e)
{
adapteretudiants.Insert("Tnouveau", "Tencorenouveau", 12, "inf");
}

// code du bouton Tmodifier


private void tmodifier_Click(object sender, EventArgs e)
{
adapteretudiants.Update("Patoche", "Remi",1000, "inf",11,
"Tnouveau", "Tencorenouveau", 12, "inf");
}

// code du bouton Tsupprimer.

private void tsupprimer_Click(object sender, EventArgs e)


{
adapteretudiants.Delete(9, "Tnouveau", "Tencorenouveau", 12, "inf");
}

50
Saliha Yacoub
videmment nous avons conomis beaucoup de code, mais si la BD est multi-usagers
et que les donnes doivent tre traites en temps rel alors cette faon de mettre jour
la BD en mode non connect est dconseill.
Les DataSet Typs sappliquent aussi Oracle. (Et les autres SGBD)

Configurer le TableAdapter.

Une fentre de connexion la BD souvre, pour saisir le mot de passe

Pour faire un Fill sur le DataSet, on utilise un SELECT ou une procdure Stocke.

Pour la table Employes, celle-ci utilise une procdure Stocke.

Pour une requte, on garde les informations par dfaut ou on crit une nouvelle requte.

51
Saliha Yacoub
Choisir la procdure stocke que vous voulez

On clique sur Suivant.

52
Saliha Yacoub
53
Saliha Yacoub
Sources
Cours de Denis Brunet : Premire Connexion au Serveur

http://sqlserver.developpez.com

https://msdn.microsoft.com/en-us/library/ms186775.aspx

https://msdn.microsoft.com/fr-ca/library/ms187752.aspx

https://msdn.microsoft.com/fr-fr/library/esbykkzb(v=vs.110).aspx

https://msdn.microsoft.com/fr-ca/library/bz9tthwx.aspx

54
Saliha Yacoub

Vous aimerez peut-être aussi