public XElement
ExecuteRequeteGetXml(string sql, params SqlParameter[] commandParameters)
{
StringBuilder res = new StringBuilder();
SqlCommand cmd = this.GetSqlCommand(CommandType.Text, sql, commandParameters);
using (XmlReader xmlr =
cmd.ExecuteXmlReader())
{
xmlr.Read();
while (xmlr.ReadState != System.Xml.ReadState.EndOfFile)
{
res.Append(xmlr.ReadOuterXml());
}
}
if (res.Length > 0)
{
return XElement.Parse(res.ToString());
}
else
{
return null;
}
}
On récupère le reader, puis on lit jusqu’à la fin du flux XML et on recopie l'info dans un StringBuilder qui est parsé en XElement à la fin.
Utile aussi la procédure GetSqlCommand : Qui suppose que la chaîne de connexion est dans le fichier de configuration avec la clé "Base".
private SqlCommand GetSqlCommand(CommandType typeCommande, string requeteSql, params SqlParameter[] commandParameters)
{
SqlCommand command = new SqlCommand();
string connexionString = ConfigurationManager.ConnectionStrings["Base"].ConnectionString;
SqlConnection connexion = new SqlConnection(connexionString);
connexion.Open();
command.Connection = connexion;
command.CommandText = requeteSql;
command.CommandType = typeCommande;
if (commandParameters != null)
{ // les
paramètres de la commande
foreach (SqlParameter p in commandParameters)
{
if (p != null)
{ // Check
for derived output value with no value assigned
if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input)
&& p.Value == null)
{
p.Value = DBNull.Value;
}
command.Parameters.Add(p);
}
}
}
return command;
}