FAQ ASP.NET/C#Consultez toutes les FAQ

Nombre d'auteurs : 39, nombre de questions : 371, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireTravailler avec des donnéesADO.NETRequêtes

Il y a en fait 2 moyens de récupérer les données d'une requête :

  • On les récupère sous forme de flux en lecture seule, en avant seulement, à l'aide d'un datareader.
  • On les stocke en mémoire dans une structure appelée dataset, facilitant ainsi l'ajout, la mise à jours et la suppression des données.



Que vous utilisiez l'une ou l'autre des méthodes, leduke a rédigé 2 excellents articles qui vous permettront de récupérer les données résultantes d'une requête.

Créé le 12 octobre 2003  par David Pedehourcq

Lien : Les objets DataAdapter et Dataset dans ADO.NET
Lien : ADO.NET : Connection, Command et DataReader

Voici un exemple ou l'on crée et on remplit un DataTable en code-behind

 
Sélectionnez

DataRow tuple; 
DataTable table = new DataTable();
DataColumn col1 = new DataColumn("Col1", Type.GetType(integer));
DataColumn col2 = new DataColumn("Col", Type.GetType(string));
 
//on ajoute les colonnes à la datatable 
table.Columns.Add(col1) ;
table.Columns.Add(col2) ;
//on crée un rows 
tuple = table.NewRow();
//on le remplis 
tuple.Item[0] = 1;
tuple.Item[1] = "Première tuple de mon datatable";
//on l'ajoute à la table 
table.Rows.Add(tuple);
//on crée un rows 
tuple = table.NewRow(); 
//on le remplis 
tuple.Item[0] = 2;
tuple.Item[1] = "deuxième tuple de mon datatable";
//on l'ajoute à la table 
table.Rows.Add(tuple);
				
Créé le 18 février 2004  par David Pedehourcq

Lien : Cours d'ADO.NET

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.

 
Sélectionnez

public static void ProcedureStockee()
{
	// Creation de la fabrique
	DbProviderFactory factory = DbProviderFactories.GetFactory(
		ConfigurationManager.ConnectionStrings["ChaineDeConnexion"].ProviderName);
	// Objet connection
	using (IDbConnection connection = factory.CreateConnection())
	{
		connection.ConnectionString = ConfigurationManager.ConnectionStrings["ChaineDeConnexion"].ConnectionString;
		connection.Open();
		// Objet Command
		using (IDbCommand command = factory.CreateCommand())
		{
			command.Connection = connection;
			// On indique que l'on souhaite utiliser une procédure stockée
			command.CommandType = CommandType.StoredProcedure;
			// On donne le nom de cette procédure stockée
			command.CommandText = "CustOrderHist";
			// On execute la commande
			command.ExecuteNonQuery();
		}
	}
}
				
Mis à jour le 28 février 2009  par Thomas Lebrun, Immobilis

Pour exécuter une requête contenant une quote simple, il faut utiliser les requêtes paramétrées.

 
Sélectionnez

public static void Parametree()
{
	// Creation de la fabrique
	DbProviderFactory factory = DbProviderFactories.GetFactory(
		ConfigurationManager.ConnectionStrings["ChaineDeConnexion"].ProviderName);
	// Objet connection
	using (IDbConnection connection = factory.CreateConnection())
	{
		connection.ConnectionString = ConfigurationManager.ConnectionStrings["ChaineDeConnexion"].ConnectionString;
		connection.Open();
		// Objet Command
		using (IDbCommand command = factory.CreateCommand())
		{
			command.CommandText = "SELECT * FROM usr_contract WHERE ctr_ref = @contract AND ctr_exg_ref = @exg";
			command.Connection = connection;
			// Paramêtres
			IDataParameter param = factory.CreateParameter();
			param.ParameterName = "@contract";
			param.DbType = DbType.String;
			param.Value = "FTE";
			command.Parameters.Add(param);
			IDataParameter param1 = factory.CreateParameter();
			param1.ParameterName = "@exg";
			param1.DbType = DbType.String;
			param1.Value = "SBF";
			command.Parameters.Add(param1);

			// Object datareader
			using (IDataReader reader = command.ExecuteReader())
			{
				while (reader.Read())
				{
					for (int i = 0; i < reader.FieldCount; i++)
					{
						if (reader[i] != DBNull.Value)
							Debug.Write(reader[i].ToString());
						else
							Debug.Write("NULL");
						if (i < reader.FieldCount)
							Debug.Write("|");
					}
					Debug.WriteLine();
				}
			}
		}
	}
}
Mis à jour le 28 février 2009  par abelman, Immobilis

Il est possible de passer des paramètres à des requêtes SQL.
Exemple avec SQL Server

 
Sélectionnez

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

// Chaîne 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) 
			Debug.Write(row[i]);
		else
			Debug.Write("NULL");
		if (i<row.GetUpperBound(0))
			Debug.Write("|");
	}
	Debug.WriteLine();
}
// Fermeture reader
reader.Close();
// Fermeture base
connection.Close();
				
Créé le 3 octobre 2005  par abelman

On utilise la méthode ExecuteNonQuery de l'objet Command.
Exemple valable pour tout type de base de données supporté par ADO.NET 2

 
Sélectionnez

public static void NonSelect()
{
	// Creation de la fabrique
	DbProviderFactory factory = DbProviderFactories.GetFactory(
		ConfigurationManager.ConnectionStrings["ChaineDeConnexion"].ProviderName);
	// Objet connection
	using (IDbConnection connection = factory.CreateConnection())
	{
		connection.ConnectionString = ConfigurationManager.ConnectionStrings["ChaineDeConnexion"].ConnectionString;
		connection.Open();
		// Objet Command
		using (IDbCommand command = factory.CreateCommand())
		{
			command.CommandText = "UPDATE usr_contract set ctr_n = ctr_n + 1";
			command.Connection = connection;
			// On indique que l'on souhaite utiliser du texte
			command.CommandType = CommandType.Text;
			// On execute la commande
			Debug.WriteLine("Nombre de lignes affectéees {0}", command.ExecuteNonQuery());
		}
	}
}
				
Mis à jour le 28 février 2009  par abelman, Immobilis

On utilise les objets Command et DataReader.
Exemple avec SQL Server

 
Sélectionnez

public static void Select()
{
	// Creation de la fabrique
	DbProviderFactory factory = DbProviderFactories.GetFactory(
		ConfigurationManager.ConnectionStrings["ChaineDeConnexion"].ProviderName);
	// Objet connection
	using (IDbConnection connection = factory.CreateConnection())
	{
		connection.ConnectionString = ConfigurationManager.ConnectionStrings["ChaineDeConnexion"].ConnectionString;
		connection.Open();
		// Objet Command
		using (IDbCommand command = factory.CreateCommand())
		{
			command.CommandText = "SELECT * FROM usr_contract";
			command.Connection = connection;
			// Object datareader
			using (IDataReader reader = command.ExecuteReader())
			{
				while (reader.Read())
				{
					for (int i = 0; i < reader.FieldCount; i++)
					{
						if (reader[i] != DBNull.Value)
							Debug.Write(reader[i].ToString());
						else
							Debug.Write("NULL");
						if (i < reader.FieldCount)
							Debug.Write("|");
					}
					Debug.WriteLine();
				}
			}
		}
	}
}
Mis à jour le 28 février 2009  par abelman, Immobilis
  

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 © 2007 Dotnet Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.