Frage

Ich brauche, indem Sie einfach eine URL Inhalt einer XML-Spalte in SQL Server zum Client zurückzukehren. Die xml hat Anweisung Verarbeitung die richtige Anwendung (Infopath in diesem Fall) zu öffnen.

Ich bin ein wenig verwirrt, alle die verschiedenen xmlreader Schriftsteller und Ströme zur Verfügung. Ich glaube, ich möchte den Inhalt SQLs ExecuteXmlReader zu Response.OutputStream schicken - aber ich bin nicht sicher, wie sie zusammen auszuloten

.

Dank ist vorab

War es hilfreich?

Lösung 4

Ich habe es einfach mit Response.Write mit dem xml als Text zu arbeiten, aber ich bin immer noch nicht sicher, ob ich wirklich XmlReaders verwenden sollte und Bäche. Hier ist, was ich getan habe:

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"]);
    }

Andere Tipps

Ich würde vorschlagen, die XML-Daten aus der Datenbank als Text bekommen, dann eine Seite dynamisch und stellen Sie den MIME-Typ im Header Erstellen zu „application / xml“. Dies sollte dem Browser mitteilen DTRt (vorausgesetzt, es konfiguriert ist korrekt).

Wenn Sie nicht mit einer Web-Anwendung arbeiten, dann möchten Sie vielleicht REs zu prüfen, mit dem Text zu analysieren und die Anwendung bestimmen zu starten, führen Sie es dann die XML (entweder über eine temporäre Datei oder über den Eingang Umleitung einiger Typ).

Da Sie keinen Hinweis darauf geben, welche Technologien Sie über XML und SQL Server verwenden, ist es schwer, wirklich spezifisch sein.

unter Verwendung von Standard-SQL für den Inhalt der XML-Spalte

Warum Sie nicht nur die Datenbank abfragen und das in einer Seite greifen und den Benutzer die Zeichenfolge zurück streamen?

So etwas wie:

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

und dann streamen nur die XML an den Benutzer zurück, z.B. mit Response.Write (xmlContents) - etwas grob in diese Richtung. (keine Fehlerbehandlung enthalten - ich werde das :-) zu handhaben Sie überlassen)

Ist das hilft jeder ??

Marc

SQL 2005 und darüber hinaus unterstützen die FOR XML Aussage. Siehe hier

Zum Beispiel:

SELECT * FROM MyTable FOR XML RAW;

Es gibt andere Schlüsselwörter für den XML-Tag-Namen zwicken auch von den datrabase Spalten unterschiedlich zu sein.

Schauen Sie sich die ExecuteXmlReader Dokumentation für was auch immer Command Klasse Sie in C # verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top