Если вы откроете Object Browser в visual studio (Ctrl + Alt + J в 2017 году, раньше это были Ctrl-W, J как аккорд), вы можете увидеть больше информации о таблицах-адаптерах в вашем проекте:
![enter image description here](https://i.stack.imgur.com/dJckB.png)
Все адаптеры таблиц наследуются от компонента. Они "ИМЕЮТ-А" DataAdapter, они не "И-А" DataAdapter. Например, они выглядят так:
public class XTableAdapter: Component{
private DataAdapter _da;
}
Они не выглядят так:
public class XTableAdapter: DataAdapter
Все это говорит, я не уверен, почему вы хотите лечить их таким образом или инкапсулируйте их вместе с таблицей данных. Данные хранятся в таблицах данных, в таблицах-адаптерах pu sh между db и datatable. Я не думаю, что когда-либо видел, чтобы кто-то делал, например, класс, который оборачивает StreamWriter (вещь, которая записывает файл) и String (содержимое файла):
class CombinedFileContentAndWriter{
StreamWriter sw = newStreamWriter(@"C:\temp\x.txt");
string content = "Hello World";
void DoIt(){
sw.Write(content);
}
}
Это не сказать, что ты не можешь, это просто странно. Предполагается, что адаптеры таблиц - это объекты жизни от короткой до средней, которые призваны перемещать данные; им не нужно объединяться в пару от этих данных. Один табличный адаптер может перезаписывать сотни различных экземпляров данных. Адаптеры таблиц могут создаваться и выбрасываться по требованию, и им не нужно оставаться в паре с данными, которые они загрузили, чтобы функционировать. Вы можете:
var dt = new XTableAdapter().GetDataByName();
//manipulate dt in a 30 minute operation
new XTableAdapter().Update(dt); //a different tableadapter sends the data back to the DB
Нет особого смысла пытаться найти универсальный c способ обращения к табличным адаптерам, потому что все они настроены именно на указанный тип данных c и имеют имена методов, которые являются переменными и, следовательно, не перегружаются:
SchoolDataset ds = new SchoolDataSet();
new StudentTableAdapter.FillByStudentId(ds, 123);
new StaffTableAdapter.FillByStaffLastName(ds, "Smith");
new ClassroomTableAdapter.FillByYearDesignation(ds, "First grade");
Это примерно столько, сколько вам нужно go с табличными адаптерами и типизированными таблицами / наборами данных.
Вопрос, с которым связана Карен, - это, конечно, умный ресурс, но стоит отметить, что главный ответ решил создать общий c способ адресации табличных адаптеров, чтобы они могли легко зарегистрировать каждый адаптер в транзакции, тогда как Microsoft намеревалась зарегистрировать операции табличного адаптера в транзакции, они должны выполняться внутри TransactionScope