|
Выгрузить таблицу в xml чтобы C# DataTable смог ее считать ReadXml
|
|||
---|---|---|---|
#18+
Как правильно конвертировать 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> ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 15:55 |
|
Выгрузить таблицу в xml чтобы C# DataTable смог ее считать ReadXml
|
|||
---|---|---|---|
#18+
Ну просто надо в запрос ещё добавить указание генерации инлайновой схемы: Код: sql 1. 2. 3.
- DataTable вполне нормально загружается из такого XML, и подхватывает сгенерированную схему. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 16:23 |
|
Выгрузить таблицу в xml чтобы C# DataTable смог ее считать ReadXml
|
|||
---|---|---|---|
#18+
Спасибо, схема, действительно, добавилась, но строка все равно не считывается в 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); ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 17:18 |
|
Выгрузить таблицу в xml чтобы C# DataTable смог ее считать ReadXml
|
|||
---|---|---|---|
#18+
urachins, вы бы еще на форуме по выращиванию кактусов спрашивали, почему код С# не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2020, 17:30 |
|
|
start [/forum/topic.php?fid=46&fpage=39&tid=1685298]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 324ms |
total: | 450ms |
0 / 0 |