Самый простой способ вывода XML с SQL-сервера на клиент
-
03-07-2019 - |
Вопрос
Мне нужно вернуть клиенту содержимое 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 #.