質問

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のドキュメントを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top