Overblog Suivre ce blog
Administration Créer mon blog

Présentation

  • : Romagny13 - Du .NET,du pur .NET
  • Romagny13 - Du .NET,du pur .NET
  • : Cycle de progression Faire (quelque chose qui marche) -> comprendre ce que l’on fait/comment cela marche -> pousser plus loin les notions
  • Contact

Recherche

Articles Récents

10 février 2014 1 10 /02 /février /2014 14:59
Repost 0
Published by Romagny13 - dans Silverlight
commenter cet article
10 février 2014 1 10 /02 /février /2014 01:56

NET RIA Services :

Accès aux données          
Service et Code métier
 
                            IHM et Code métier
Côté serveur
Côté client



1 Créer un projet Silverlight (ne pas cocher « activer les services RIA WCF »)
ria1.png
 

2 Ajouter un nouvel élément > Service WCF

ria2.png


3 définir le contrat

[ServiceContract] pour l’interface
[OperationContract] pour les méthodes

 

  [ServiceContract]
    public interface IClientService
    {
        [OperationContract]
        List<Client> GetClients();
    }

 

4 Classe ClientService implémentant le contrat

 

public class ClientService : IClientService
    {
        public List<Client> GetClients()
        {
            List<Client> clients = new List<Client>();
            SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=DbDemo;Integrated Security=True");
 
            using (SqlCommand command = connection.CreateCommand())
            {
                command.CommandType = CommandType.Text;
                command.CommandText = "select * from Client";
                connection.Open();
                using (SqlDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Client client = new Client();
                        client.Id = reader["Id"] == DBNull.Value ? default(int) : int.Parse(reader["Id"].ToString());
                        client.Name = reader["Name"] == DBNull.Value ? default(string) : reader["Name"].ToString();
                        client.Email = reader["Email"] == DBNull.Value ? default(string) : reader["Email"].ToString();
                        client.CategoryId = reader["CategoryId"] == DBNull.Value ? default(int) : int.Parse(reader["CategoryId"].ToString());
 
                        clients.Add(client);
 
                    }
                }
                   
            }
            connection.Close();
            return clients;
        }
 
    }

 

 Générer le projet *.Web

 

Noter l’adresse du service (clic droit sur *.svc > voir dans l’inspecteur de la page)

Web.config

 

<system.serviceModel>

        <behaviors>

            <serviceBehaviors>

                <behavior name="">

                    <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />

                    <serviceDebug includeExceptionDetailInFaults="false" />

                </behavior>

            </serviceBehaviors>

        </behaviors>

        <serviceHostingEnvironment aspNetCompatibilityEnabled="true"

            multipleSiteBindingsEnabled="true" />

    </system.serviceModel>

 

 

5 Dans le projet IHM Silverlight
Ajouter une référence de service  > indiquer l’adresse du service
 
 
ria3.png
La référence ainsi qu’un fichier de configuration sont ajoutés

 

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IClientService" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647">
                    <security mode="None" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="../ClientService.svc" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IClientService" contract="ServiceReference1.IClientService"
                name="BasicHttpBinding_IClientService" />
        </client>
    </system.serviceModel>
</configuration>



Utilisation (affichage de la liste dans un datagrid)
MainPage

 

   public MainPage()
        {
            InitializeComponent();
 
            ClientServiceClient service = new ClientServiceClient();
            service.GetClientsCompleted += service_GetClientsCompleted;
 
            service.GetClientsAsync();
           
        }
 
        void service_GetClientsCompleted(object sender, GetClientsCompletedEventArgs e)
        {
            dgClients.ItemsSource = e.Result;
        }

 

Xaml

 

<Grid x:Name="LayoutRoot" Background="White">
 
        <sdk:DataGrid Name="dgClients" HorizontalAlignment="Left" Height="253" Margin="10,20,0,0" VerticalAlignment="Top" Width="371"/>
 
    </Grid>



ria4.png

 

Note : SvcUtile.exe se trouve dans C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\
  ressources

Silverlight toolkit(bibliothéque de controls) http://codeplex.com/Silverlight
Exemples de codes dans C:\Program Files (x86)\Microsoft SDKs\Silverlight
Cours http://www.dotnet-france.com/Cours/Silverlight.html Exemples de codes Silverlight dans browser  http://samples.msdn.microsoft.com/silverlight/samplebrowser/index.htm#/?sref=easing_functions_gallery&sref=DeepZoomSimpleZoom_InOnly

   
 
Repost 0
Published by Romagny13 - dans Silverlight
commenter cet article
5 février 2014 3 05 /02 /février /2014 17:30

 

PL/SQL

T-SQL

Plage/exemple

C#

tinyint

tinyint

0 à 255

byte (System.Byte)

smallint

smallint

-32 768 à 32 767

short(System.Int16)

 

 

 

 

int

int

-2 147 483 648

à 2 147 483 647

int(System.Int32)

bigint

bigint

-9 223 372 036 854 775 808 à 9 223 372 036 854 775 807

long(System.Int64)

numeric(5,2)        

numeric(5,2)        

Exemple : 40,77

float(System.Single)

ou double/voir string

decimal(5,2)        

decimal(5,2)        

Exemple : 40,77

float(System.Single)

ou double/voir string

float,real

float

 

double (System.Double)

bool

bit

                     

bool(System.Boolean)

char(50)            

char(50)            

de 1 à 4000 caractères

string(System.String)

varchar(100)        

varchar(100)        

de 1 à 8000 caractères

string(System.String)         

national char(1000)

nchar(1000)

de 1 à 8000 caractères

string(System.String)

text,longtext

text

 

string(System.String)

date

date

Exemple : 2003-10-30

DateTime(System.DateTime)

time

Time(7)

Exemple : 13:00:00

DateTime(System.DateTime)

datetime

datetime

Exemple : 2003-10-30 13:00:00

DateTime(System.DateTime)

timestamp

timestamp

 

TimeSpan(System.TimeSpan)

varbinary(100), blob    

varbinary(100)     

de 1 à 8000

byte[](System.Byte[])

longblob

image

 

byte[](System.Byte[])

           

  • types numériques, ne pas mettre d’espace      
  • Pour les types numeric, decimal, float mettre une virgule (et pas un point)        
  • decimal [ (p[ ,s] )] et numeric[ (p[ ,s]) -10^38 +1 et 10^38 - 1.

p (précision)  Nombre maximal de chiffres décimaux à gauche et à droite de la virgule.Comprise entre 1 et 38(par défaut 18)

s (échelle) Nombre de chiffres décimaux à droite de la virgule. Ce nombre est soustrait de p. Comprise entre 0 et p (par défaut 0)

  •  Insérer une image dans une colonne en T-SQL :

INSERT INTO NOMTABLE(NOMCOLONNE)

   SELECT 'avatarcsharp.png' FROM OPENROWSET(BULK N'C:\Users\romagny\Pictures\avatarcsharp.png', SINGLE_BLOB) AS Document

GO

Exemple de table en T-SQL (SQL Server 2012)

create table DEMOTABLE (

   DEMOOCTET            tinyint              null,

   DEMOSMALLINT         smallint             null,

   DEMOSEQUENCIEL       int                  null,

   DEMOBIGINT           bigint               null,

   DEMONUMERIC          numeric(5,2)         null,

   DEMODECIMAL          decimal(5,2)         null,

   DEMOFLOAT            float                null,

   DEMOBOOL             bit                  null,

   DEMOCHAR             char(50)             null,

   DEMOVARCHAR          varchar(100)         null,

   DEMOTEXT             text                 null,

   DEMONATIONALCHAR     nchar(1000)         null,

   DEMODATE             date                null,

   DEMOTIME             time(7)              null,

   DEMODATETIME         datetime             null,

   DEMOHEURESYSTEME     timestamp            null,

   DEMOVBIN             varbinary(1000)      null,

   DEMOIMAGE            image                null

)

Repost 0
Published by Romagny13 - dans SQL
commenter cet article
4 février 2014 2 04 /02 /février /2014 23:17
  •   Avoir un diagramme de sa base de données MySQL c’est possible avec MySQL Workbench . Menu Database > Reverse Engineer > sélection de la base

 

  • Il est même possible de créer un nouveau diagramme (en cliquant sur l’icone « add new diagram ») et de créer/modifier des tables,...

 

mysqldiag1.png 

Repost 0
Published by Romagny13 - dans Divers
commenter cet article
4 février 2014 2 04 /02 /février /2014 15:51

1-Accéder à une ressource Xaml depuis le code C#

  <Window.Resources>

        <CollectionViewSource x:Key="citiesViewSource" />

    </Window.Resources>

    <Grid>

        <ListBox HorizontalAlignment="Left" Height="319" VerticalAlignment="Top" Width="517" ItemsSource="{Binding Source={StaticResource citiesViewSource}}"/>

    </Grid>

 

List<string> cities = new List<string>() { "Londres", "Berlin", "Lyon", "Dijon", "Madrid" };

 

CollectionViewSource citiesSource = (CollectionViewSource)this.FindResource("citiesViewSource");

citiesSource.Source = cities.ToList();

 

2-Trier    

Ne pas oublier d’ajouter à la page le namespace xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"    

<Window.Resources>

        <CollectionViewSource x:Key="citiesViewSource">

            <CollectionViewSource.SortDescriptions>

                <scm:SortDescription Direction="Ascending"/>

            </CollectionViewSource.SortDescriptions>

        </CollectionViewSource>

</Window.Resources>

    

Il est possible de spécifier sur quelle priopriété trier avec PropertyName  

Exemple : je trie un dictionnaire selon la valeur    

<scm:SortDescription PropertyName="Value" Direction="Ascending"/>

 

Repost 0
Published by Romagny13 - dans Xaml
commenter cet article
4 février 2014 2 04 /02 /février /2014 01:33

1-Préparation

 

MySQL 5.6.16

http://dev.mysql.com/downloads/file.php?id=450945  

Normalement le connector .NET est compris dans le package (sinon http://dev.mysql.com/downloads/connector/net/6.8.html)

 

Il faut ajouter une référence dans son projet à MySql.Data.dll (située dans le répertoire C:\Program Files (x86)\MySQL\Connector NET 6.8.3\Assemblies\v4.5)

 

Ajouter using MySql.Data.MySqlClient;  en haut de ses pages

   

MySqlConnection, MySqlCommand, MySqlDataReader, etc. : Se connecter à une base MySQL est relativement simple .De la même manière qu’avec une base Access ou SQL Server on va utiliser une connexion, des commandes, des datareaders et utiliser les méthodes ExecuteNonQuery(),ExecuteScalar() ,...Il est également possible d’exécuter des procédures stockées .

 

La documentation sur le connector .NET http://dev.mysql.com/doc/connector-net/en/index.html

 

Le PL/SQL diffère un peu du T-SQL.Il faudra par exemple préférer les apostrophes aux crochets.

 

Exemple de création de base de données simple . Deux tables (Client et Category) ayant une clé primaire auto incrémentée , et une relation (un client a une catégorie) et une procédure stockée

CREATE TABLE `dbdemo`.`client` (

  `Id` INT NOT NULL AUTO_INCREMENT,

  `Name` VARCHAR(45) NOT NULL,

  `Email` VARCHAR(100) NULL,

  `CategoryId` INT NOT NULL,

  PRIMARY KEY (`Id`));

 

CREATE TABLE `dbdemo`.`category` (

  `Id` INT NOT NULL AUTO_INCREMENT,

  `Name` VARCHAR(50) NOT NULL,

  PRIMARY KEY (`Id`));

 

ALTER TABLE `dbdemo`.`client`

ADD INDEX `CategoryId_idx` (`CategoryId` ASC);

ALTER TABLE `dbdemo`.`client`

ADD CONSTRAINT `CategoryId`

  FOREIGN KEY (`CategoryId`)

  REFERENCES `dbdemo`.`category` (`Id`)

  ON DELETE NO ACTION

  ON UPDATE NO ACTION;

 

CREATE PROCEDURE `GetAllClients`()

BEGIN

SELECT `Id`, `Name`, `Email`, `CategoryId`

from `client`;

End                    

 

2-La chaine de connexion

Une aide si besoin http://www.connectionstrings.com/mysql-connector-net-mysqlconnection/

Il est possible de la stocker dans le fichier de configuration

<connectionStrings>

        <add name="dbConnectionString" connectionString="server=localhost;user id=root;password=monmotdepasse;database=dbdemo" providerName="MySql.Data.MySqlClient" />          

    </connectionStrings>

 

3- Exécuter une requête /récupérer une liste   

               public List<Client> GetClients()

        {

            List<Client> clients = new List<Client>();

            using (MySqlConnection connection = Sql.Instance.GetConnection())

            {

                using (MySqlCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "SELECT `Id`, `Name`, `Email`, `CategoryId` FROM `client`;";

                    using (MySqlDataReader reader = command.ExecuteReader())

                    {

                        while (reader.Read())

                        {

                            Client client = new Client();

                            client.Id = reader["Id"] == DBNull.Value ? default(int) : int.Parse(reader["Id"].ToString());

                            client.Name = reader["Name"] == DBNull.Value ? default(string) : reader["Name"].ToString();

                            client.Email = reader["Email"] == DBNull.Value ? default(string) : reader["Email"].ToString();

                            client.CategoryId = reader["CategoryId"] == DBNull.Value ? default(int) : int.Parse(reader["CategoryId"].ToString());

                            clients.Add(client);

 

                        }

                    }

                }

            }

            return clients;

        }

 

4 – Procédure stockée

Un autre exemple cette fois avec une procédure stockée .Je récupère le client par sa clé primaire

                         public Client GetClient(int id)

             {

                    Client client = new Client();

                    using(MySqlConnection connection = Sql.Instance.GetConnection())

                    {

                           using (MySqlCommand command = connection.CreateCommand())

                           {

                                  command.CommandType = CommandType.StoredProcedure;

                                  command.CommandText = "GetClient";

                                  command.Parameters.Add(new MySqlParameter("parid", id));

 

                                  using (MySqlDataReader reader = command.ExecuteReader())

                                  {

                                        while (reader.Read())

                                        {

                                               client.Id = reader["Id"] == DBNull.Value ? default(int) : int.Parse(reader["Id"].ToString());

                                               client.Name = reader["Name"] == DBNull.Value ? default(string) : reader["Name"].ToString();

                                               client.Email = reader["Email"] == DBNull.Value ? default(string) : reader["Email"].ToString();

                                               client.CategoryId = reader["CategoryId"] == DBNull.Value ? default(int) : int.Parse(reader["CategoryId"].ToString());

                                        }

                                  }

                           }

                    }

                    return client;

             }

 

Je passe ici le paramètre parid, portant le même nom que le paramètre de la procédure stockée

CREATE PROCEDURE `GetClient`(parid int)

BEGIN

SELECT `Id`, `Name`, `Email`, `CategoryId`

from `client`

where `Id`=parid;

 

5-Récupérer la clé auto incrémentée après un ajout

command.CommandText = "SELECT LAST_INSERT_ID()";

result = Convert.ToInt32(command.ExecuteScalar());

 

6 – ADO.NET Entity Framework et MySQL

Rien de plus facile

dbdemoEntities mySqlDemoEntities = new dbdemoEntities();

// affichage d'une liste

DbSet<client> clients = mySqlDemoEntities.client;

dataGridView1.DataSource = clients.ToList();

        

// OU

// utilisation de la procédure stockée GetAllClients()

dataGridView1.DataSource = mySqlDemoEntities.GetAllClients();

 

Repost 0
Published by Romagny13 - dans ADO.NET
commenter cet article
3 février 2014 1 03 /02 /février /2014 19:05

Avec DbProvider aucun changement au niveau du code de la présentation, de même pour le fichier pour de configuration

public class ClientDAO : DbBase          

{          

             public List<Client> GetClients()          

             {

                 List<Client> clients = new List<Client>();

            using (DbConnection connection = Sql.Instance.GetConnection())

            {

 

                using (DbCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "SELECT [Id],[Name],[Email],[CategoryId] FROM [Client]";

                    using (DbDataReader reader = command.ExecuteReader())

                    {

                        while (reader.Read())

                        {

                            Client client = new Client();

                            client.Id = reader["Id"] == DBNull.Value ? default(int) : int.Parse(reader["Id"].ToString());

                            client.Name = reader["Name"] == DBNull.Value ? default(string) : reader["Name"].ToString();

                            client.Email = reader["Email"] == DBNull.Value ? default(string) : reader["Email"].ToString();

                            client.CategoryId = reader["CategoryId"] == DBNull.Value ? default(int) : int.Parse(reader["CategoryId"].ToString());

                            clients.Add(client);

                        }

                    }

                }

            }

                    return clients;

              }

              public Client GetClient(int id)

              {

                   Client client = new Client();

                   using (DbConnection connection = Sql.Instance.GetConnection())

              {

 

                using (DbCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "SELECT [Id],[Name],[Email],[CategoryId] FROM [Client] WHERE [Id]=parid";

                    command.Parameters.Add(CreateParameter(command, "@id", id));

 

                    using (DbDataReader reader = command.ExecuteReader())

                    {

                        while (reader.Read())

                        {

                            client.Id = reader["Id"] == DBNull.Value ? default(int) : int.Parse(reader["Id"].ToString());

                            client.Name = reader["Name"] == DBNull.Value ? default(string) : reader["Name"].ToString();

                            client.Email = reader["Email"] == DBNull.Value ? default(string) : reader["Email"].ToString();

                            client.CategoryId = reader["CategoryId"] == DBNull.Value ? default(int) : int.Parse(reader["CategoryId"].ToString());

                        }

                    }

                }

            }

                    return client;

               }

              public int AddClient(Client client)

              {

                  int result = 0;

            using (DbConnection connection = Sql.Instance.GetConnection())

            {

                using (DbCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "INSERT INTO [Client]([Name],[Email],[CategoryId]) VALUES(?,?,?);";

                    command.Parameters.Add(CreateParameter(command, "@name", client.Name));

                    command.Parameters.Add(CreateParameter(command, "@email", client.Email));

                    command.Parameters.Add(CreateParameter(command, "@categoryId", client.CategoryId));

                    command.ExecuteNonQuery();

 

                    command.CommandText = "SELECT @@IDENTITY";

                    result = Convert.ToInt32(command.ExecuteScalar());

                }

            }

 

                    return result;

               }

               public int UpdateClient(Client client)

               {

                 int result = 0;

            using (DbConnection connection = Sql.Instance.GetConnection())

            {

                using (DbCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "UPDATE [Client] SET [Name]=?,[Email]=?,[CategoryId]=? WHERE [Id]=?";

                    command.Parameters.Add(CreateParameter(command, "@name", client.Name));

                    command.Parameters.Add(CreateParameter(command, "@email", client.Email));

                    command.Parameters.Add(CreateParameter(command, "@categoryId", client.CategoryId));

                    command.Parameters.Add(CreateParameter(command, "@categoryId", client.Id));

                    result = command.ExecuteNonQuery();

                }

            }

 

                    return result;

             }

             public int DeleteClient(Client client)

             {

                 int result = 0;

            using (DbConnection connection = Sql.Instance.GetConnection())

            {

 

                using (DbCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "DELETE FROM [Client] WHERE [Id]=?";

                    command.Parameters.Add(CreateParameter(command, "@id", client.Id));

                    result = command.ExecuteNonQuery();

                }

            }

 

                    return result;

                }

       }

Je fais hériter d’une classe DbBase au lieu de réécrire la méthode dans toutes les classes DAO

public class DbBase

{

           protected DbParameter CreateParameter(DbCommand command, string parameterName, object value)

            {

                    DbParameter parameter = command.CreateParameter();

                    parameter.ParameterName = parameterName;

                    parameter.Value = value;

                    return parameter;

             }          

}          

 

Le singleton

public class Sql

       {

             private static Sql _instance;

             private DbConnection connection;

             private static object locker = new object();

             public ConnectionStringSettings ConnectionStringSettings { get; set; }

 

             private Sql() { }

 

             public static Sql Instance

             {

                    get

                    {

                           lock (locker)

                           {

                                  if (_instance == null)

                                  _instance = new Sql();

                           }

                           return _instance;

                    }

             }

 

             public DbConnection GetConnection()

             {

                    if (connection == null)

                    {

                           ConnectionStringSettings = ConfigurationManager.ConnectionStrings["dbConnectionString"];

                           DbProviderFactory factory = DbProviderFactories.GetFactory(ConnectionStringSettings.ProviderName);

                           connection = factory.CreateConnection();                    

                    }

            connection.ConnectionString = ConnectionStringSettings.ConnectionString;

                    if (connection.State == ConnectionState.Closed)

                           connection.Open();

                    return connection;

 

             }                        

       }

 

Repost 0
Published by Romagny13 - dans ADO.NET
commenter cet article
3 février 2014 1 03 /02 /février /2014 19:04

 

Le singleton utilisé pour la connexion

public class Sql

       {

             private static Sql _instance;

             private OleDbConnection connection;

             private static object locker = new object();

             public ConnectionStringSettings ConnectionStringSettings { get; set; }

 

             private Sql() { }

 

             public static Sql Instance

             {

                    get

                    {

                           lock (locker)

                           {

                                  if (_instance == null)

                                  _instance = new Sql();

                           }

                           return _instance;

                    }

             }

 

             public OleDbConnection GetConnection()

             {

                    if (connection == null)

                    {

                           ConnectionStringSettings = ConfigurationManager.ConnectionStrings["dbConnectionString"];

                           connection = new OleDbConnection();

                    }

            connection.ConnectionString = ConnectionStringSettings.ConnectionString;

                    if (connection.State == ConnectionState.Closed)

                           connection.Open();

                    return connection;

 

             }

                                 

       }

 

La classique classe Client

public class Client          

{

        public int Id { get; set; }

        public string Name { get; set; }

        public string Email { get; set; }

        public int CategoryId { get; set; }

}

 

 

Repost 0
Published by Romagny13 - dans ADO.NET
commenter cet article
3 février 2014 1 03 /02 /février /2014 18:44

Dans le fichier de configuration

  <connectionStrings>

    <add name="dbConnectionString" providerName="System.Data.OleDb" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\romagny\Documents\metier\sources\DbDemo.mdb;" />

  </connectionStrings>

 

Pour bien faire il faudrait utiliser une BindingList(avec un projet windows forms) et implémenter INotifyPropertyChanged

BindingList<Client> bindingClients = new BindingList<Client>(clients);

 

GetAll

MainForm

        private ClientDAO clientDAO;

        private List<Client> clients;

 

        private void MainForm_Load(object sender, EventArgs e)

        {

            clientDAO = new ClientDAO();

            clients = clientDAO.GetClients();

            dataGridView1.DataSource = clients;

        }

 

ClientDAO

public List<Client> GetClients()

        {

            List<Client> clients = new List<Client>();

            using (OleDbConnection connection = Sql.Instance.GetConnection())

            {

                using (OleDbCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "SELECT [Id],[Name],[Email],[CategoryId] FROM [Client]";

                    using (OleDbDataReader reader = command.ExecuteReader())

                    {

                        while (reader.Read())

                        {

                            Client client = new Client();

                            client.Id = reader["Id"] == DBNull.Value ? default(int) : int.Parse(reader["Id"].ToString());

                            client.Name = reader["Name"] == DBNull.Value ? default(string) : reader["Name"].ToString();

                            client.Email = reader["Email"] == DBNull.Value ? default(string) : reader["Email"].ToString();

                            client.CategoryId = reader["CategoryId"] == DBNull.Value ? default(int) : int.Parse(reader["CategoryId"].ToString());

                            clients.Add(client);

                        }

                    }

                }

            }

            return clients;

        }

 

GetOne

MainForm

// récupération du client par la clé primaire

Client client = clientDAO.GetClient(12);

ClientDAO

public Client GetClient(int id)

        {

            Client client = new Client();

            using (OleDbConnection connection = Sql.Instance.GetConnection())

            {

                using (OleDbCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "SELECT [Id],[Name],[Email],[CategoryId] FROM [Client] WHERE [Id]=?";

                    command.Parameters.Add(new OleDbParameter("@id", id));

 

                    using (OleDbDataReader reader = command.ExecuteReader())

                    {

                        while (reader.Read())

                        {

                            client.Id = reader["Id"] == DBNull.Value ? default(int) : int.Parse(reader["Id"].ToString());

                            client.Name = reader["Name"] == DBNull.Value ? default(string) : reader["Name"].ToString();

                            client.Email = reader["Email"] == DBNull.Value ? default(string) : reader["Email"].ToString();

                            client.CategoryId = reader["CategoryId"] == DBNull.Value ? default(int) : int.Parse(reader["CategoryId"].ToString());

                        }

                    }

                }

            }

 

            return client;

        }

 

Add

MainForm

// création d'un client

Client client = new Client() { Name="Prenium Patrick",Email="preniumpat54@msn.com",CategoryId=2};

 

// ajout

clientDAO.AddClient(client);

ClientDAO

public int AddClient(Client client)

        {

            int result = 0;

            using (OleDbConnection connection = Sql.Instance.GetConnection())

            {

 

                using (OleDbCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "INSERT INTO [Client]([Name],[Email],[CategoryId]) VALUES(?,?,?);";

                    command.Parameters.Add(new OleDbParameter("@name", client.Name));

                    command.Parameters.Add(new OleDbParameter("@email", client.Email));

                    command.Parameters.Add(new OleDbParameter("@categoryId", client.CategoryId));

                    command.ExecuteNonQuery();

 

                    command.CommandText = "SELECT @@IDENTITY";

                    result = Convert.ToInt32(command.ExecuteScalar());

                }

            }

            return result;

        }

 

Update

MainForm

// récupérer le client à modifier

Client client = clients.Where(c=> c.Id ==14).First();

client.Email = "preniumpatrick54@voila.fr";

 

// mise à jour

clientDAO.UpdateClient(client);

ClientDAO

public int UpdateClient(Client client)

        {

            int result = 0;

            using (OleDbConnection connection = Sql.Instance.GetConnection())

            {

 

                using (OleDbCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "UPDATE [Client] SET [Name]=?,[Email]=?,[CategoryId]=? WHERE [Id]=?";

                    command.Parameters.Add(new OleDbParameter("@name", client.Name));

                    command.Parameters.Add(new OleDbParameter("@email", client.Email));

                    command.Parameters.Add(new OleDbParameter("@categoryId", client.CategoryId));

                    command.Parameters.Add(new OleDbParameter("@Id", client.Id));

                    result = command.ExecuteNonQuery();

                }

            }

            return result;

        }

 

Delete

MainForm

// récupérer le client à supprimer, exemple le client sélectionné dans le datagridView(propiétés du datagridView MultiSelect à false et SelectionMode à FullRowSelect)

Client client = (Client)dataGridView1.SelectedRows[0].DataBoundItem;

 

clientDAO.DeleteClient(client);

 

ClientDAO

public int DeleteClient(Client client)

             {

                    int result = 0;

            using (OleDbConnection connection = Sql.Instance.GetConnection())

            {

                using (OleDbCommand command = connection.CreateCommand())

                {

                    command.CommandType = CommandType.Text;

                    command.CommandText = "DELETE FROM [Client] WHERE [Id]=?";

                    command.Parameters.Add(new OleDbParameter("@id", client.Id));

                    result = command.ExecuteNonQuery();

                }

            }

 

                    return result;

             }

 

Repost 0
Published by Romagny13 - dans ADO.NET
commenter cet article
3 février 2014 1 03 /02 /février /2014 17:35

1-Types de données

ACCESS

SQL

C#

Numérique

Long

int

Texte court

VarChar

string

Texte long

LongText

string

Date/Heure

DateTime

DateTime

Monétaire

Currency

double

Oui/Non

Bit

bool

Objet OLE

LongBinary

byte[]

Lien hypertexte

LongText

string

 

A cela on peut ajouter Short, Single, Double, Decimal, Byte, VarBinary

Exemple :

On crée une table Product avec Access   

  access1.png

La même table en SQL

Create table [Product]

(

[ProductId] LONG NOT NULL IDENTITY (1,1) PRIMARY KEY,

[ProductName] VarChar(50) NOT NULL,

[Description] LongText NULL,

[UnitsInStock] Long NOT NULL,

[RequiredDate] DateTime NOT NULL,

[UnitPrice] Currency NULL,

[Discontinued] Bit NULL,

[Picture] LongBinary NULL,

[ProduitUrl] LongText NULL

)

 

La classe C# (simplifiée) correspondante

public class Product

{

        public int ProductId { get; set; }

        public string ProductName { get; set; }

        public string Description { get; set; }

        public int UnitsInStock { get; set; }

        public DateTime RequiredDate { get; set; }

        public double UnitPrice { get; set; }

        public bool Discontinued { get; set; }

        public byte[] Picture { get; set; }

        public string ProduitUrl { get; set; }

}

 

2-Syntaxe des requêtes et procédures

 

Le nom des paramètres (OleDbParameter  et DbParameter) est « inutile », c’est plus l’ordre d’ajout des paramètres à la commande qui compte .

On peut aussi bien écrire

command.CommandText = "INSERT INTO [Client]([Name],[Email],[CategoryId]) VALUES(@name,@mail,@categoryId)";

command.Parameters.Add(new OleDbParameter("@name", client.Name));

command.Parameters.Add(new OleDbParameter("@email", client.Email));

command.Parameters.Add(new OleDbParameter("@categoryId", client.CategoryId));

que

command.CommandText = "INSERT INTO [Client]([Name],[Email],[CategoryId]) VALUES(?,?,?)";

command.Parameters.Add(new OleDbParameter("?", client.Name));

command.Parameters.Add(new OleDbParameter("?", client.Email));

command.Parameters.Add(new OleDbParameter("?", client.CategoryId));

 

C’est tellement vrai que l’on peut même donner un nom de paramètre ne correspondant pas du tout à celui utilisé dans la requête.

  • Pour les vues/procédures il faut respecter une écriture.

Ajouter un préfixe « par » devant les paramètres peut éviter les conflits  avec les noms de colonnes.

Ne pas utiliser non plus @ pour les paramètres si on ne veut pas avoir de mauvaises surprises :o

Exemple

CREATE PROCEDURE [InsertCategory](parName VarChar(100))

AS

INSERT INTO [Category]([Name] )

VALUES(parName)

GO

 

3- Récupérer @@IDENTITY

Il est possible de récupérer la clé auto incrémentée ajoutée, mais on ne peut pas ajouter la requête avec l’insert comme c’est le cas avec SQL Server.

command.CommandText = "Select @@IDENTITY";

result = Convert.ToInt32(command.ExecuteScalar());

 

Repost 0
Published by Romagny13 - dans ADO.NET
commenter cet article