SQL ServerからクライアントにXMLを出力する最も簡単な方法
-
03-07-2019 - |
質問
URLをクリックするだけで、SQLサーバーのxml列の内容をクライアントに返す必要があります。 xmlには、正しいアプリケーション(この場合はInfopath)を開くための処理命令があります。
利用可能なさまざまなxmlreaderライターおよびストリームに関して、私は少し混乱しています。 SQL ExecuteXmlReaderのコンテンツをResponse.OutputStreamに送信したいのですが、それらを一緒に組み込む方法がわかりません。
ありがとうございました
解決 4
xmlをテキストとしてResponse.Writeを使用するだけで機能しましたが、XmlReaderとストリームを本当に使用すべきかどうかはまだわかりません。私がやったことは次のとおりです。
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"]);
}
他のヒント
データベースからXMLをテキストとして取得し、ページを動的に作成して、ヘッダーのMIMEタイプを" application / xml"に設定することをお勧めします。これにより、ブラウザにDTRTが通知されます(正しく構成されている場合)。
Webアプリケーションで作業していない場合は、REを使用してテキストを解析し、起動するアプリケーションを決定し、XMLをフィードすることを検討することができます(一時ファイルを使用するか、タイプ)。
XMLとSQL Server以外で使用しているテクノロジーを示すものではないため、具体的に特定するのは困難です。
標準のSQLを使用してXML列のコンテンツをデータベースに照会し、ページ内でそれを取得し、その文字列をユーザーにストリーミングして戻すのはなぜですか?
次のようなもの:
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();
}
}
そしてXMLをユーザーにストリームバックするだけです。 Response.Write(xmlContents)を使用して-これらの行にほぼ沿ったもの(エラー処理は含まれていません-処理するのはあなたに任せます:-))。
それは役に立ちますか?
マーク
SQL 2005以降では、 FOR XML
ステートメントがサポートされています。 こちら
例:
SELECT * FROM MyTable FOR XML RAW;
XMLタグ名を調整してdatrabase列とは異なるキーワードもあります。
C#で使用するコマンドクラスについては、ExecuteXmlReaderのドキュメントを参照してください。