Сделайте его встроенным строго типизированным ресурсом.
Добавьте файл в свой проект и задайте для него действие «Содержимое» и «Не копировать».Затем откройте вкладку «Дизайнер ресурсов» (либо из папки «Свойства», либо в диалоговом окне «Свойства проекта») и перетащите файл на холст дизайнера ресурсов.Файл теперь встроен в вашу сборку.Это создаст строго типизированное свойство класса Resources
по умолчанию с тем же именем, что и файл, из которого он получен.
Чтобы загрузить его в набор данных, вы можете подключить к нему StringReader
,Обратите внимание, что вы почти всегда хотите сначала загрузить схему, так как она меняет поведение ReadXml
:
var ds = new DataSet();
using (var rdr = new StringReader(Properties.Resources.myschema))
{
ds.ReadXmlSchema(rdr);
}
ds.ReadXml("mystuff.xml", XmlReadMode.IgnoreSchema);
Для XmlReadMode у вас есть несколько вариантов.Они определяют, что произойдет, если ваши данные не соответствуют вашей схеме, и что делать, если в XML-файле есть встроенная схема, которая отличается от уже загруженной вами:
XmlReadMode.ReadSchema
будетимпортировать любую встроенную схему, если она не конфликтует с уже загруженной схемой;если есть столкновения имен, ReadXml
сгенерирует;или XmlReadMode.IgnoreSchema
проигнорирует любую встроенную схему и попытается принудительно принудительно ввести данные в указанную вами схему.В этом режиме данные, не соответствующие вашей схеме, будут , а не попадать в набор данных. XmlReadMode.InferSchema
будут игнорировать любую встроенную схему, но в этом случае любые данные, которые не соответствуютнесоответствие вашей схеме приведет к расширению вашей схемы;например, если в вашем XML-файле есть таблица, которой нет в вашей схеме, эта таблица будет добавлена в вашу схему, а данные импортированы.Если между столбцами разных типов возникают конфликты имен, выдается ReadXml
;
Если вы сначала выполните ReadXml
, вы всегда получите режим ReadSchema
, если есть встроенная схема, или *Режим 1030 *, если нет.Даже если это то, что вы хотите, лучше об этом сказать прямо.