powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выгрузить таблицу в xml чтобы C# DataTable смог ее считать ReadXml
5 сообщений из 5, страница 1 из 1
Выгрузить таблицу в xml чтобы C# DataTable смог ее считать ReadXml
    #40027675
urachins
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильно конвертировать sql таблицу в виде xml строки, что бы клиент C# потом смог ее восстановить в DataTable через ReadXml ?

Хранимка SQL формирует из таблицы строку следующим образом:

declare @StrDeleted nvarchar(max)
Create table #RWSDeleted (TableName nvarchar(20), RowNum int)

insert into #RWSDeleted values('qqqq', 4)
insert into #RWSDeleted values('wwww', 5)

set @StrDeleted = cast( (SELECT * FROM #RWSDeleted as [RWSDeleted]
FOR XML AUTO, BINARY BASE64, ELEMENTS, Root ('DeletedRow') ) as nvarchar(max))
select @StrDeleted

Но C# не может ее считать через ReadXml:

private void CreateDataTableFromString(DataTable dtTable, string data)
{
StringReader sRead = new StringReader(data);
dtTable.ReadXml(sRead);
}

Как я понимаю C# нужен вот такой заголовок схемы, как на примере DataTable WrteXML , но как получить такой же формат в SQL?

<NewDataSet>\r\n <xs:schema id=\"NewDataSet\" xmlns=\"\" xmlns:xs=\" http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n <xs:element name=\"NewDataSet\" msdata:IsDataSet=\"true\" msdata:MainDataTable=\"RWDTSOld\" msdata:UseCurrentLocale=\"true\">\r\n <xs:complexType>\r\n <xs:choice minOccurs=\"0\" maxOccurs=\"unbounded\">\r\n <xs:element name=\"RWDTSOld\">\r\n <xs:complexType>\r\n <xs:sequence>\r\n <xs:element name=\"TableName\" type=\"xs:string\" minOccurs=\"0\" />\r\n <xs:element name=\"SysRowID\" msdata:DataType=\"System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" type=\"xs:string\" minOccurs=\"0\" />\r\n <xs:element name=\"SysRevID\" type=\"xs:long\" minOccurs=\"0\" />\r\n <xs:element name=\"RowNum\" type=\"xs:long\" minOccurs=\"0\" />\r\n </xs:sequence>\r\n </xs:complexType>\r\n </xs:element>\r\n </xs:choice>\r\n </xs:complexType>\r\n </xs:element>\r\n </xs:schema>\r\n

<RWDTSOldn>\r\ <TableName>JobAsmbl</TableName>\r\n </RWDTSOld>\r\n</NewDataSet>
...
Рейтинг: 0 / 0
Выгрузить таблицу в xml чтобы C# DataTable смог ее считать ReadXml
    #40027689
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну просто надо в запрос ещё добавить указание генерации инлайновой схемы:
Код: sql
1.
2.
3.
select top 10 * from sys.objects as DataTable
for xml auto, binary base64, elements, root('NewDataSet'), type,
  xmlschema('NewDataSet')


- DataTable вполне нормально загружается из такого XML, и подхватывает сгенерированную схему.
...
Рейтинг: 0 / 0
Выгрузить таблицу в xml чтобы C# DataTable смог ее считать ReadXml
    #40027710
urachins
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, схема, действительно, добавилась, но строка все равно не считывается в DataTable , он пустой и ошибок при CreateDataTableFromString - нет. Может, что то с названиями схем, таблиц, кстати, в схеме нет свойства msdata:MainDataTable которое появляется при WriteXML
Или я что-то с параметрами напутал? Можно показать пример работающего C# кода?

SQL:
set @StrDeleted = cast( (SELECT * FROM #RWSDeleted as [RWSDeleted]
FOR XML AUTO, BINARY BASE64, ELEMENTS, Root ('DeletedRow'), type, xmlschema('RWSDeleted') ) as nvarchar(max))

C#:
DataTable RWSDeleted = new DataTable();
RWDTSOld.TableName = "RWSDeleted";
RWSDeleted.Columns.Add("TableName", typeof(string));
RWSDeleted.Columns.Add("SysRowID", typeof(Guid));
RWSDeleted.Columns.Add("RowNum", typeof(int));

CreateDataTableFromString(RWSDeleted, strDts);
...
Рейтинг: 0 / 0
Выгрузить таблицу в xml чтобы C# DataTable смог ее считать ReadXml
    #40027717
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
urachins,

вы бы еще на форуме по выращиванию кактусов спрашивали, почему код С# не работает.
...
Рейтинг: 0 / 0
Выгрузить таблицу в xml чтобы C# DataTable смог ее считать ReadXml
    #40027719
urachins
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
Но экпортные-то данные готовятся в sql, хорошо попробую задать вопрос в C#
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выгрузить таблицу в xml чтобы C# DataTable смог ее считать ReadXml
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]