Самый простой способ вывода XML с SQL Server на клиент - PullRequest
0 голосов
/ 06 марта 2009

Мне нужно вернуть содержимое столбца xml на сервере sql клиенту, просто щелкнув URL-адрес. В xml есть инструкция по открытию правильного приложения (в данном случае Infopath).

Я немного сбит с толку относительно всех доступных писателей и потоков xmlreader. Я предполагаю, что хочу отправить содержимое SQL-запросов ExecuteXmlReader в Response.OutputStream - но не уверен, как соединить их вместе.

Спасибо заранее

Ответы [ 4 ]

0 голосов
/ 09 марта 2009

Я заработал, просто используя Response.Write с xml в качестве текста, но я все еще не уверен, стоит ли мне действительно использовать 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"]);
    }
0 голосов
/ 06 марта 2009

Почему бы вам просто не запросить базу данных, используя стандартный 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) - что-то примерно в том же духе (без обработки ошибок - я оставлю это на ваше усмотрение :-)).

Помогает ли это кому-нибудь ??

Марк

0 голосов
/ 06 марта 2009

SQL 2005 и выше поддерживают оператор FOR XML. См. здесь

Например:

SELECT * FROM MyTable FOR XML RAW;

Существуют и другие ключевые слова для настройки имен тегов XML, которые также отличаются от столбцов базы данных.

Затем посмотрите документацию ExecuteXmlReader для любого класса Command, который вы используете в C #.

0 голосов
/ 06 марта 2009

Я бы предложил получить XML из базы данных в виде текста, затем динамически создать страницу и установить тип MIME в заголовке на «application / xml». Это должно сообщить браузеру DTRT (при условии, что он настроен правильно).

Если вы не работаете с веб-приложением, вы можете рассмотреть возможность использования RE для анализа текста и определения запускаемого приложения, а затем передачи ему XML (либо с использованием временного файла, либо с помощью перенаправления ввода некоторых типа).

Поскольку вы не указываете, какие технологии вы используете, помимо XML и SQL Server, трудно быть по-настоящему конкретным.

...