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
- 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
(
);
}
}
}
}
}