FAQ ASP.NET/C#

FAQ ASP.NET/C#Consultez toutes les FAQ
Nombre d'auteurs : 39, nombre de questions : 371, dernière mise à jour : 15 juin 2021
Sommaire→Travailler avec des données→ADO.NET→Requêtes- Comment récupérer les données résultant d'une requête ?
- Comment remplir une DataTable sans passer par un DataAdapter ?
- Comment puis-je exécuter une procédure stockée ?
- Comment exécuter une requête dont le texte comprend une quote simple ?
- Comment exécuter une requête paramétrée ?
- Comment exécuter une requête non SELECT ?
- Comment exécuter une requête SELECT ?
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.
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
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);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.
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();
}
}
}Pour exécuter une requête contenant une quote simple, il faut utiliser les requêtes paramétrées.
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();
}
}
}
}
}Il est possible de passer des paramètres à des requêtes SQL.
Exemple avec SQL Server
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();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
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());
}
}
}On utilise les objets Command et DataReader.
Exemple avec SQL Server
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();
}
}
}
}
}


