Самый простой способ вывода XML с SQL-сервера на клиент

StackOverflow https://stackoverflow.com/questions/619363

Вопрос

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

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

Благодарность - это аванс

Это было полезно?

Решение 4

Я заработал, просто используя 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"]);
    }

Другие советы

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

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

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

Почему бы вам просто не запросить содержимое XML-столбца в базе данных с использованием стандартного SQL, сохранить это на странице и передать эту строку обратно пользователю?

Что -то вроде:

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.Напишите (xmlContents) - что-то примерно в этом духе (обработка ошибок не включена - я оставляю это на ваше усмотрение :-) ).

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

Марк

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

Например:

SELECT * FROM MyTable FOR XML RAW;

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top