Einfachste Weg, um XML-Ausgabe von SQL Server zum Client
-
03-07-2019 - |
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
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.
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.