2013-03-07 3 views
4
protected override DataTable internalExecuteTable(string SQL) 
{ 
    DbDataReader reader = ExecuteReader(SQL); 
    DataTable dt = new DataTable(); 
    dt.Load(reader); 
    reader.Close(); 
    return dt; 
} 

«internalExecuteTable» подчеркнет и выдает ошибку, что «System.Xml» не ссылается, и я должен добавить «System.Xml» ссылку. Но почему?System.Xml необходимо без причины

Я использую приведенный выше код для чтения из базы данных SQLite (System.Data.SQLite обертки)

+3

Иногда VisualStudio путается ... в кеше часто отображаются ошибки, которых не существует. Вы пытались создать свое решение с помощью MSBuild напрямую? Вы пытались закрыть и снова открыть VisualStudio? –

+0

@JesseWebb Я уже пробовал это, но это похоже на то, что ошибка действительно является нормальной ошибкой. Добавление System.Xml исправляет это, но я все равно не понимаю почему ... – teamalpha5441

+0

Вы пытались комментировать код и возвращать null? Интересно, не является ли это переопределением? Я знаю, иногда .NET имеет странные зависимости от ответа Энтони, но я не уверен, что это один из этих случаев, не вытаскивая JustDecompile –

ответ

10

Вы используете System.Xml косвенно. DataTable имеет зависимости от классов, определенных в сборке System.Xml. Если вы посмотрите на документацию для класса или если вы просто изучите ее в своей среде IDE, вы заметите, что она включает в себя множество методов для чтения и записи XML, например.

Используя System.Data.DataTable, вам также необходимо указать System.Xml.

+0

звучит, как будто имеет смысл, когда вы так говорите. –

+4

В этом случае 'DataTable' реализует интерфейс' IXmlSerializable', который находится внутри System.Xml.dll. –

0

DataTable является according to MSDN объявлен как

[SerializableAttribute] 
public class DataTable 
    : MarshalByValueComponent, 
     IListSource, 
     ISupportInitializeNotification, 
     ISupportInitialize, 
     ISerializable, 
     IXmlSerializable 

IXmlSerializable объявляет методы, которые используют XmlReader, XmlWriter и XmlSchema либо для вывода или не-, все они объявляются соответственно определены в system.Xml.dll.

Если вы погружаетесь в код (с использованием официальных источников или IL/Decompiler), вы можете заметить использование атрибутов:

[XmlSchemaProvider("GetDataTableSchema")] 
//... 
public class DataTable : //... 

К сожалению, ребята MSDN не включили эту ссылку на System.Xml явно в слове раздел - возможно, потому что обычные шаблоны проектов включают его в любом случае.

Смежные вопросы