Pergunta

Eu preciso para retornar conteúdo de uma coluna de xml no sql server ao cliente simplesmente clicando em um URL. O XML tem o processamento de instruções para abrir o aplicativo correto (Infopath neste caso).

Estou um pouco confuso a respeito de todos os vários escritores XmlReader e riachos disponíveis. Suponho que deseja enviar o conteúdo de SQLs ExecuteXmlReader para Response.OutputStream -. Mas estou inseguro sobre como sondar-los juntos

Graças é o avanço

Foi útil?

Solução 4

Eu tenho que trabalhar simplesmente usando Response.Write com o xml como texto, mas eu ainda não tenho certeza se eu realmente deveria estar usando XmlReaders e riachos. Aqui está o que eu fiz:

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

Outras dicas

Eu sugeriria começar o XML do banco de dados como texto, em seguida, criar uma página dinamicamente e definir o tipo de MIME no cabeçalho para "application / xml". Isso deve dizer ao navegador para DTRT (assumindo que é configurado corretamente).

Se você não está trabalhando com uma aplicação web, então você pode querer considerar o uso de REs para analisar o texto e determinar a aplicação de lançamento, em seguida, alimentá-lo com o XML (ou usando um arquivo temporário ou através de redirecionamento de entrada de algum tipo).

Uma vez que você não dá qualquer indicação de quais tecnologias você está usando para além XML e SQL Server, é difícil ser muito específico.

Por que você não apenas consultar o banco de dados usando SQL padrão para o conteúdo da coluna XML, e a garra que em uma página e transmitir isso de volta string para o usuário?

Algo como:

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

e depois é só transmitir de volta o XML para o usuário, por exemplo, usando Response.Write (xmlContents) - algo mais ou menos ao longo destas linhas (nenhuma manipulação de erro incluídos - Vou deixar isso para você lidar :-))

.

Isso ajuda qualquer ??

Marc

SQL 2005 e para além do apoio a declaração FOR XML. Consulte aqui

Por exemplo:

SELECT * FROM MyTable FOR XML RAW;

Existem outras palavras-chave para ajustar os nomes de tags XML para ser diferente das colunas datrabase também.

Em seguida, olhar a documentação ExecuteXmlReader por qualquer classe de comando que você usa em C #.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top