Question

Je dois renvoyer le contenu d'une colonne XML du serveur SQL au client en cliquant simplement sur une URL. Le xml a une instruction de traitement pour ouvrir la bonne application (Infopath dans ce cas).

Je suis un peu confus quant à tous les différents rédacteurs et flux de xmlreader disponibles. Je suppose que je veux envoyer le contenu de SQL ExecuteXmlReader à Response.OutputStream - mais je ne sais pas comment les assembler.

Merci, c'est avance

Était-ce utile?

La solution 4

Je l'ai obtenu en utilisant simplement Response.Write avec le code xml en tant que texte, mais je ne suis toujours pas sûr de devoir utiliser réellement XmlReaders et les flux. Voici ce que j'ai fait:

SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select Name, InfopathDoc from document where id = @id";
cmd.Parameters.AddWithValue("@id", docId);

using (SqlDataReader dr = cmd.ExecuteReader())
{
    if (dr.Read())
    {
        Response.ContentType = "application/xml";
        Response.AppendHeader("Content-disposition", "attachment; filename=" + dr["Name"]);
        Response.Write(dr["InfopathDoc"]);
    }

Autres conseils

Je suggérerais d'extraire le code XML de la base de données sous forme de texte, puis de créer une page de manière dynamique et de définir le type MIME dans l'en-tête sur "application / xml". Cela devrait indiquer au navigateur DTRT (en supposant qu'il soit configuré correctement).

Si vous ne travaillez pas avec une application Web, vous pouvez envisager d'utiliser des RE pour analyser le texte et déterminer l'application à lancer, puis alimentez-le au format XML (à l'aide d'un fichier temporaire ou via la redirection des entrées). type).

Etant donné que vous ne donnez aucune indication sur les technologies que vous utilisez au-delà de XML et SQL Server, il est difficile d'être vraiment spécifique.

Pourquoi ne pas simplement interroger la base de données à l'aide du code SQL standard pour connaître le contenu de la colonne XML, le saisir dans une page et le renvoyer à l'utilisateur?

Quelque chose comme:

string xmlContents = string.Empty;

using(SqlConnection _con = new SqlConnection("server=(local);database=Northwind;Integrated Security=SSPI;")
{
  string queryStatement = "SELECT XmlColumn FROM dbo.MyTable WHERE id = @ID";

  using(SqlCommand _cmd = new SqlCommand(queryStatement, _con)
  {
    _cmd.Parameters.AddWithValue("@ID", 5555);

    _con.Open();

    xmlContents = _cmd.ExecuteScalar().ToString(); // returns an object
    _con.Close();
  }
}

, puis transmettez simplement le fichier XML à l'utilisateur, par exemple. using Response.Write (xmlContents) - quelque chose de gros sur ce sujet (pas de traitement des erreurs inclus - je vous laisse le soin de le gérer :-)).

Est-ce que cela vous aide?

Marc

SQL 2005 et les versions ultérieures prennent en charge l’instruction FOR XML . Voir ici

.

Par exemple:

SELECT * FROM MyTable FOR XML RAW;

Il existe d'autres mots-clés pour modifier les noms de balises XML afin qu'ils soient également différents des colonnes datrabase.

Consultez ensuite la documentation ExecuteXmlReader pour la classe de commandes que vous utilisez en C #.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top