我需要通过简单地单击URL将sql server中的xml列的内容返回给客户端。 xml具有打开正确应用程序的处理指令(在这种情况下为Infopath)。
我对所有可用的各种xmlreader编写器和流感到困惑。我想我想将SQL ExecuteXmlReader的内容发送到Response.OutputStream - 但我不确定如何将它们连接在一起。
谢谢是提前
答案 0 :(得分:0)
我建议将XML作为文本从数据库中获取,然后动态创建页面并将标题中的MIME类型设置为“application / xml”。这应该告诉浏览器DTRT(假设它已正确配置)。
如果您没有使用Web应用程序,那么您可能需要考虑使用RE来解析文本并确定要启动的应用程序,然后将其提供给XML(使用临时文件或通过某些输入重定向类型)。
由于您没有说明您在XML和SQL Server之外使用的技术,因此很难真正具体。
答案 1 :(得分:0)
为什么不直接使用标准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) - 大致沿着这些线(没有包含错误处理 - 我会留给你处理:-))。
这对任何事都有帮助吗?
马克
答案 2 :(得分:0)
SQL 2005及更高版本支持FOR XML
语句。见here
例如:
SELECT * FROM MyTable FOR XML RAW;
还有其他关键字可以将XML标记名称调整为与数据库列不同。
然后查看ExecuteXmlReader文档,了解您在C#中使用的任何Command类。
答案 3 :(得分:0)
我通过简单地使用带有xml的Response.Write作为文本来实现它,但我仍然不确定我是否真的应该使用XmlReaders和流。这是我做的:
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"]);
}