właściwość połączenia w TableAdapters jest zdefiniowany jako wewnętrznej.
internal global::System.Data.SqlClient.SqlConnection Connection
Tak więc w przypadku, gdy nie jest w TypedDataset samo jak montaż głównych okien formy aplikacji, nie będzie mógł dostępu właściwości połączenia. Ten problem z numerem może zostać rozwinięty później, gdy zmienisz kod zestawu danych i przeniesiesz go do oddzielnego projektu, który będzie produkować niezależny zespół.
Aby rozwiązać ten problem, można wykonać, jak wspomniano poniżej.
utwórz klasę częściową dla tabeli TableAdapter i dodaj kolejny konstruktor obok domyślnego publicznego konstruktora bez parametrów. Zakładając typ TableAdapter jak MyTableAdapter
public partial class MyTableAdapter
{
public MyTableAdapter(SqlConnection connection)
{
thisSetConnection(connection);
this.ClearBeforeFill = true;
}
public void SetConnection(SqlConnection connection)
{
this._connection = connection;
}
}
Trzeba to zrobić dla aż TableAdapters masz w swoim projekcie. TableAdapter nie ma żadnej wspólnej klasy bazowej, ale dzięki temu są one deklarowane jako klasy częściowe, więc jesteśmy w stanie zrobić to w sposób opisany powyżej.
Teraz przy starcie, można utworzyć instancję swojej TableAdapter tak ..
SqlConnection connection;
//create the connection here at runtime..
MyTableAdapter adapter = new MyTableAdapter(connection);
lub można nawet przypisać ją później po utworzeniu instancji TableAdapter z domyślnego konstruktora bez parametrów publicznego ..
SqlConnection connection;
//create the connection here at runtime..
MyTableAdapter adapter = new MyTableAdapter();
adapter.(connection);
Od VS2010 widoczność połączenia może być s pecified (np. public) i klasa podstawowa dla wygenerowanych DataTableAdapters może być określona ... (to znaczy, ten post jest głównie związany z VS2008 i wcześniejszymi problemami :-) –