IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo
Sommaire > Fichiers et données > Bases de données (ADO.NET)
        Qu'est-ce que ADO.NET ?
        Quelles classes utiliser pour me connecter à ma base de données ?
        Qu'est-ce que Sql Server Mobile 2005 ?
        Quelle chaine de connexion utiliser pour se connecter à une base de données ?
        Quelle est la différence entre les modes connecté et déconnecté ?
        Comment se connecter à une base de données ?
        Comment exécuter une requête SELECT ?
        Comment exécuter une requête non SELECT ?
        Comment exécuter une requête paramétrée ?
        Comment exécuter une requête dont le texte comprend une quote simple ?
        Comment puis-je exécuter une procédure stockée ?
        Comment écrire le contenu de ma table dans un fichier XML ?
        Comment lancer un DTS SQL Server via .NET ?
        Comment connaitre les lignes supprimées, ajoutées, modifiées d'un datagrid rempli par un dataset ?
        Comment modifier le time out d'une requête ?
        Comment créer dynamiquement une base de données Sql Mobile ?
        Comment ajouter une nouvelle ligne à un dataSet ?
        Comment modifier une ligne de mon dataSet ?
        Comment supprimer une ligne de mon dataSet ?



Qu'est-ce que ADO.NET ?
auteur : cardi
Cette définition est tirée de MSDN.

ADO.NET propose un accès cohérent à des sources de données telles que Microsoft SQL Server, ainsi qu'à des sources de données exposées via OLE DB et XML. Des applications grand public de partage de données peuvent utiliser ADO.NET pour se connecter à des sources de données et les extraire, les manipuler et les mettre à jour.


Quelles classes utiliser pour me connecter à ma base de données ?
auteurs : abelman, tomlev
Le .NET Framework dispose de plusieurs providers ADO.NET permettant de se connecter à divers SGBD :

  • System.Data.SqlClient pour SQL Server ;
  • System.Data.SqlServerCe pour SQL Server Compact (ajouter une référence à System.Data.SqlServerCe.dll) ;
  • System.Data.Odbc pour les SGBD fournissant un pilote ODBC ;
  • System.Data.OleDb pour tous les SGBD ayant un fournisseur OLE DB ;
  • System.Data.Oracle.Client pour Oracle (ajouter une référence à System.Data.OracleClient.dll) ;
    Note : ce provider n'est plus officiellement supporté par Microsoft, il est recommandé d'utiliser le provider fourni par Oracle (voir plus bas).
Pour d'autres types de base de données, il n'existe pas de provider intégré au .NET framework, il faut donc utiliser celui fourni par l'éditeur :


Qu'est-ce que Sql Server Mobile 2005 ?
auteur : cardi
Cette définition est tirée de MSDN.

Microsoft SQL Server 2005 Mobile Edition (SQL Server Mobile), précédemment Microsoft SQL Server 2000 Édition Windows CE 2.0 (SQL Server CE), étend les solutions d'entreprise de Microsoft aux applications sectorielles et de gestion d'informations personnelles sur un appareil, tout en offrant aux développeurs un modèle de programmation cohérent pour développer rapidement des applications. SQL Server Mobile offre des fonctionnalités de base de données relationnelle, tout en conservant une taille compacte : une banque de données fiable, un processeur d'optimisation des requêtes et des possibilités de connectivité fiables et évolutives.

lien : fr Sql Server Mobile 2005 (MSDN)

Quelle chaine de connexion utiliser pour se connecter à une base de données ?
auteur : cardi
Visitez le site regroupant la liste des chaines de connexion des différents SGBD : http://www.connectionstrings.com/


Quelle est la différence entre les modes connecté et déconnecté ?
auteur : cardi
Mode connecté

Ce mode permet à un client de se connecter à un serveur de base de données et tant que le client ne fermera pas la connexion, le serveur se souviendra de lui. Lorsque l'on désirera récupérer des informations (SELECT), on les recevra au compte-gouttes, c'est-à-dire une par une.

Mode déconnecté

Le but de ce mode est de récupérer en un bloc une portion de la base de données afin d'effectuer des traitements en local sur la machine du client. On aura donc une ouverture de connexion à la base de données, la récupération en un seul bloc du résultat puis la fermeture de la connexion.


Comment se connecter à une base de données ?
auteur : abelman
Voici un exemple pour SQL Server

          
	using System.Data.SqlClient;
	
    class adobasic
    {
        [STAThread]
        static void Main(string[] args)
        {
            try
            {
                // Chaine de connexion
                string connectString = "database=test_paresco;server=am01;User ID=BACK;pwd=xxxxxx";
                // Objet connection
                SqlConnection connection = new SqlConnection(connectString);
                // Ouverture
                connection.Open();
                // Fermeture
                connection.Close();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.ToString());
            }
        }
    }

        
lien : fr Consulter les différents cours sur ADO.NET

Comment exécuter une requête SELECT ?
auteur : abelman
On utilise les objets Command et DataReader.
Exemple avec SQL Server :

          
            // chaine de connexion
            string connectString = "database=test_paresco;server=am01;User ID=BACK;pwd=xxxxxx";
            // Objet connection
            SqlConnection connection = new SqlConnection(connectString);
            // Ouverture
            connection.Open();
            // Objet Command
            SqlCommand command = new SqlCommand("SELECT * FROM usr_contract", connection);
            // Objet DataReader
            SqlDataReader reader = command.ExecuteReader();
            Object[] row = null;
            while (reader.Read())
            {
                if (row == null)
                    row = new Object[reader.FieldCount];
                reader.GetValues(row);
                for (int i = 0; i < row.GetLength(0); i++)
                {
                    if (row[i] != DBNull.Value)
                        Console.Write(row[i]);
                    else
                        Console.Write("NULL");
                    if (i < row.GetUpperBound(0))
                        Console.Write("|");
                }
                Console.WriteLine();
            }
            // Fermeture reader
            reader.Close();
            // Fermeture connection
            connection.Close();


        
Consulter les cours sur ADO.NET pour plus d'informations.

lien : fr http://dotnet.developpez.com/cours/

Comment exécuter une requête non SELECT ?
auteur : abelman
On utilise la méthode ExecuteNonQuery de l'objet Command.
Exemple avec SqlServer

          
	// chaine de connexion
	string connectString = "database=test_paresco;server=am01;User ID=BACK;pwd=xxxxxx";
	// Objet connection
	SqlConnection connection = new SqlConnection(connectString);
	// Ouverture
	connection.Open();
	// Objet Command
	SqlCommand command = new SqlCommand("UPDATE usr_contract set ctr_n = ctr_n + 1", connection);
	// Execution
	int affectedrows = command.ExecuteNonQuery();
	Console.WriteLine("Nombre de lignes affectées {0}", affectedrows);
	// Fermeture connection
	connection.Close();

        
Consulter la page cours pour ADO.NET.

lien : fr http://dotnet.developpez.com/cours/

Comment exécuter une requête paramétrée ?
auteur : abelman
Il est possible de passer des paramètres à des requêtes SQL.
Exemple avec SQL Server :

          
			using System.Data.SqlClient;
			using System.Data;
			// ...

            // chaine de connexion
            string connectString = "database=test_paresco;server=am01;User ID=BACK;pwd=xxxxxx";
            // Objet connection
            SqlConnection connection = new SqlConnection(connectString);
            // Ouverture
            connection.Open();
            // Objet Command
            SqlCommand command = new SqlCommand("SELECT * FROM usr_contract WHERE " +
            "ctr_ref = @contract AND ctr_exg_ref = @exg",
            connection);
            // Paramètres
            command.Parameters.Add(new SqlParameter("@contract", SqlDbType.VarChar, 5));
            command.Parameters["@contract"].Value = "FTE";
            command.Parameters.Add(new SqlParameter("@exg", SqlDbType.VarChar, 8));
            command.Parameters["@exg"].Value = "SBF";
            // Object datareader
            SqlDataReader reader = command.ExecuteReader();
            Object[] row = null;
            while (reader.Read())
            {
                if (row == null)
                    row = new Object[reader.FieldCount];
                reader.GetValues(row);
                for (int i = 0; i < row.GetLength(0); i++)
                {
                    if (row[i] != DBNull.Value)
                        Console.Write(row[i]);
                    else
                        Console.Write("NULL");
                    if (i < row.GetUpperBound(0))
                        Console.Write("|");
                }
                Console.WriteLine();
            }
            // Fermeture reader
            reader.Close();
            // Fermeture base
            connection.Close();


        
Consulter les cours sur ADO.NET pour plus d'informations.

lien : fr http://dotnet.developpez.com/cours/

Comment exécuter une requête dont le texte comprend une quote simple ?
auteur : abelman
Pour exécuter une requête contenant une quote simple, il faut utiliser les requêtes paramétrées
On peut aussi faire plus simple en doublant les quotes avant d'exécuter la requête.

          
	string sql = "SELECT * FROM pasta WHERE name = 'aujourd''hui'";
	// Ou
	string name = "aujourd'hui";
	sql = "SELECT * FROM pasta WHERE name = " + name.Replace("'", "''");

        

Comment puis-je exécuter une procédure stockée ?
auteur : Thomas Lebrun
Pour pouvoir exécuter une procédure stockée, vous devez utiliser un objet SqlCommand et indiquer à sa propriété CommandType que vous désirez utiliser une procédure stockée

          
	// Objet SqlCommand
	SqlCommand cmd = new SqlCommand();
	// On indique que l'on souhaite utiliser une procédure stockée
	cmd.CommandType = CommandType.StoredProcedure;
	// On donne le nom de cette procédure stockée
	cmd.CommandText = "CustOrderHist";

        
Plus d'informations sur les différents cours ADO.NET (voir liens ci-dessous)

lien : fr http://dotnet.developpez.com/cours/ADO.NET/
lien : fr http://dotnet.developpez.com/tutoriels/ado1/

Comment écrire le contenu de ma table dans un fichier XML ?
auteur : Thomas Lebrun
En utilisant un DataSet et sa méthode WriteXml, vous avez la possibilité d'écrire le contenu d'une table dans un fichier XML.

          
    public class EcrireXML
    {
        public static void Main()
        {
            // Création de la chaine de connexion
            string _ConnectionString = "Server=Srv1;Database=Northwind;User ID=sa;Password=asdasd";
            // Création de la connexion
            SqlConnection _SqlConnection = new SqlConnection();
            _SqlConnection.ConnectionString = _ConnectionString;

            // Création du SqlDataAdapter
            SqlDataAdapter da = new SqlDataAdapter("Select * from Customers", _SqlConnection);

            // Création d'un DataSet
            DataSet ds = new DataSet();

            // Remplissage du DataSet avec le SqlDataAdapter
            da.Fill(ds, "Customers");

            // Ecriture du fichier XML au moyen de la méthode WriteXml
            ds.WriteXml("C:\\TestXml.xml");
        }
    }
					
        
Voici, après traitement, le contenu du fichier TestXml.xml :

          
<?xml version="1.0" standalone="yes" ?>
<NewDataSet>
	<myTable>
		<CustomerID>ALFKI</CustomerID>
		<CompanyName>Alfreds Futterkiste</CompanyName>
		<ContactName>Maria Anders</ContactName>
		<ContactTitle>Sales Representative</ContactTitle>
		<Address>Obere Str. 57</Address>
		<City>Berlin</City>
		<PostalCode>12209</PostalCode>
		<Country>Germany</Country>
		<Phone>030-0074321</Phone>
		<Fax>030-0076545</Fax>
	</myTable>
</NewDataSet>

        

Comment lancer un DTS SQL Server via .NET ?
auteurs : HULK, neguib
Ce code permet d'exécuter un DTS SQL Server 2000 via une application .NET. Un import de la référence " Microsoft DTSPackage Object Library " est nécessaire.

          
		using System.Runtime.InteropServices;
		using DTS;
		//...

		private void RunDTS(string servername , string dtsname)
		{
		    Package package = new Package();

		    package.LoadFromSQLServer(servername ,"","", DTSSQLServerStorageFlags.DTSSQLStgFlag_UseTrustedConnection, , , , dtsname);

		    package.Execute();
		}

        

Comment connaitre les lignes supprimées, ajoutées, modifiées d'un datagrid rempli par un dataset ?
auteur : HULK
Ce code permet de détecter les valeurs de lignes d'un datagrid qui ont été modifiées, supprimées ou ajoutées par l'utilisateur. On suppose ici que l'on remplit le datagrid avec un dataset et un sqldataadapter. La requête SELECT du DataAdapter contient deux champs, nous avons donc la requête du type :
SELECT Champ1, Champ2 FROM Table
Dans l'évènement click d'un bouton, nous pouvons mettre :

          
            // représente une ligne de données dans un datatable
            // variable string pour récupérer nos résultats
            string ligneModif, ligneSupp, ligneAjout;

            // Nous allons parcourir chaque ligne de notre DataTable
            foreach (DataRow dr in dataSet.Tables["DataTable"].Rows)
            {
                // Selon l'état de la ligne
                switch (dr.RowState)
                {
                    // Ligne modifiée
                    case DataRowState.Modified:
                        // dr[0] récupère la valeur de la première colonne
                        // DataRowVersion.Original récupère la valeur avant la modification
                        ligneModif += dr[0, DataRowVersion.Original] + "-" + dr[1, DataRowVersion.Original];
                        break;
                    // Ligne supprimée
                    case DataRowState.Deleted:
                        ligneSupp += dr[0, DataRowVersion.Original] + "-" + dr[1, DataRowVersion.Original];
                        break;
                    // Ligne ajouté
                    case DataRowState.Added:
                        ligneAjout += dr[0] + "-" + dr[1];
                        break;
                    default:
                        break;
                }
            }

            string result = "ligne(s) modifiée(s) : \n" + ligneModif + "\nligne(s) supprimée(s) : \n" + ligneSupp + "\nLigne(s) ajoutée(s) :\n" + ligneAjout;

            MessageBox.Show(result);

        

Comment modifier le time out d'une requête ?
auteur : cardi
Les classes xxxCommand (sous-entendu SqlCommand, OleDbCommand, etc.) possèdent la propriété CommandTimeout pour définir le temps maximum que pourra prendre la requête.

          
      SqlCommand maCommand = new SqlCommand("SELECT * FROM MaTable");

      // Par défaut, CommandTimeout vaut 30 secondes
      Console.WriteLine("Temps avant Timeout : {0}", maCommand.CommandTimeout);

      // Met le Timeout à 10 secondes
      maCommand.CommandTimeout = 10;
      Console.WriteLine("Temps avant Timeout : {0}", maCommand.CommandTimeout);

      // Permet de ne pas générer de Timeout
      maCommand.CommandTimeout = 0;
      
        
lien : fr System.Data.SqlClient.SqlCommand (MSDN)

Comment créer dynamiquement une base de données Sql Mobile ?
auteur : cardi
Grâce à la classe SqlCeEngine, il est possible de créer une base de données dynamiquement :

          
      // Récupération du path de l'application
      String CheminApplication = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetCallingAssembly().GetName().CodeBase);
      // Concaténation du path et du fichier de base de données
      String CheminFichier = System.IO.Path.Combine(CheminApplication, "bd.sdf");

      // Objet permettant la création d'une base de données
      System.Data.SqlServerCe.SqlCeEngine Engine = new System.Data.SqlServerCe.SqlCeEngine("Data Source = " + CheminFichier);
      Engine.CreateDatabase();
      
        

Comment ajouter une nouvelle ligne à un dataSet ?
auteur : Kerod

L'ajout d'une ligne dans un dataset peut être réalisé à partir de plusieurs méthodes, mais nous verrons ici celle qui utilise la classe du dataSet que vous avez créé.

Pour cet exemple, nous supposerons que nous avons une table Personne contenant toutes les informations nécessaires pour constituer un carnet d'adresses.

Notre première étape consistera à créer une nouvelle ligne (DataRow) vide :

          
DataRow contactRow = personneDataSet.Personne.NewRow();

        

Une fois cette création terminée, il ne nous reste plus qu'à insérer les données de notre formulaire d'insertion dans notre nouvelle ligne (contactRow) :

          
contactRow["nom"] = nomEdit.EditValue.ToString();
contactRow["prenom"] = prenomEdit.EditValue.ToString();
contactRow["mail"] = emailEdit.EditValue.ToString();
contactRow["phone"] = phoneEdit.EditValue.ToString();
contactRow["adresse"] = adressEdit.EditValue.ToString();
...

        

Enfin, il ne nous reste plus qu'à l'ajouter à notre DataSet et valider cette action :

          
personneDataSet.Personne.Rows.Add(contactRow); //Ajoute la nouvelle ligne au dataSet courant
if (personneTableAdapter.Update(personneDataSet.Personne) > 0) //Demande de mise à jour de notre table Personne
    MessageBox.Show("Le nouveau contact a bien été ajouté.");
else
    MessageBox.Show("Le nouveau contact n'a pas été ajouté.");

        
lien : fr Les objets DataAdapter et Dataset dans ADO.NET

Comment modifier une ligne de mon dataSet ?
auteur : Kerod

La modification d'une ligne dans un DataSet peut être réalisée à partir de plusieurs méthodes :

  • à l'aide d'une procédure stockée
  • à l'aide des fonctions du DataSet que nous avons créé.

Nous verrons ici la deuxième méthode.

Pour cet exemple, nous supposerons que nous avons une table Personne contenant toutes les informations nécessaires pour constituer un carnet d'adresses.

Notre première étape consiste à récupérer la ligne existante dans le dataSet à l'aide de l'id que nous aurons récupéré :

          
DataRow contactRow = personneDataSet.Personne.Rows.Find(idPersonne);

        

Une fois cette récupération terminée, nous pouvons modifier les données avec les nouvelles issues de notre formulaire :

          
//On signale le début de l'édition de la ligne
contactRow.BeginEdit();
                
contactRow["nom"] = nomEdit.EditValue.ToString();
contactRow["prenom"] = prenomEdit.EditValue.ToString();
contactRow["mail"] = emailEdit.EditValue.ToString();
contactRow["phone"] = phoneEdit.EditValue.ToString();
contactRow["adresse"] = adressEdit.EditValue.ToString();

//Fin de l'édition du contactRow
contactRow.EndEdit();

        

Enfin il ne reste plus qu'à mettre à jour notre DataTable avec les nouvelles valeurs de notre dataSet :

          
if (personneTableAdapter.Update(personneDataSet.Personne) > 0) //Demande de mise à jour de notre table Personne
    MessageBox.Show("La modification du contact a bien été prise en compte.");
else
    MessageBox.Show("La modification n'a pas pu être réalisée.");

        
lien : fr Les objets DataAdapter et Dataset dans ADO.NET

Comment supprimer une ligne de mon dataSet ?
auteur : Kerod

La suppression d'une ligne dans un DataSet peut être réalisé à partir de plusieurs méthodes :

  • à l'aide d'une procédure stockée ;
  • à l'aide des fonctions du DataSet que nous avons créé.

Nous verrons ici la deuxième méthode.

Pour cet exemple, nous supposerons que nous avons une table Personne contenant toutes les informations nécessaires pour constituer un carnet d'adresses.

Notre première étape consiste à récupérer la ligne existante dans le dataSet à l'aide de l'id que nous aurons récupéré :

          
DataRow contactRow = personneDataSet.Personne.Rows.Find(idPersonne);

        

Une fois cette récupération terminée, il ne reste plus qu'à la supprimer de notre DataSet :

          
contactRow.Delete();

        

Enfin nous devons mettre à jour notre DataTable :

          
if (personneTableAdapter.Update(personneDataSet.Personne) > 0)
    contactStatus.Caption = "Le contact a bien été supprimé";
else
    contactStatus.Caption = "Le contact n'a pas pu être supprimé";

        
lien : fr Les objets DataAdapter et Dataset dans ADO.NET


Consultez les autres F.A.Q's


Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2010 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.