Таблица не существует в текущем контексте? - PullRequest
0 голосов
/ 17 апреля 2020

Мне нужно управлять множеством таблиц из разных баз данных в моем проекте, как непосредственно из него, так и автоматически создаваемых и отображаемых в пользовательском интерфейсе (например, в DGV) для чтения, фильтрации и печати. В предыдущем вопросе он предложил мне использовать DataSets и LINQ, поэтому я искал и следовал примерам для добавления кода DataSet:

private void button1_Click(object sender, EventArgs e)
{
    openConnections(); // open connections for SqlCommands I'm using in this piece of code

    DataSet ds = new DataSet();

    SqlCommand command;
    command = new SqlCommand("SELECT * FROM [database1].[dbo].[articles]", connectionSQLDatabase1);
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = command;
    adapter.Fill(ds, "articles"); //articles becomes the Tables[0] in the ds DataSet

    SqlCommand command2;
    command2 = new SqlCommand("SELECT * FROM [database2].[dbo].[articles_Details]", connectionSQLDatabase2);
    SqlDataAdapter adapter2 = new SqlDataAdapter();
    adapter2.SelectCommand = command2;
    adapter2.Fill(ds, "articles_Details"); //articles becomes the Tables[1] in the ds DataSet

    // LINQ code to query ds DataSet (.....)
}

Теперь на этом этапе кода мне нужно запросить мой DS DataSet, я видел, что могу сделать это с помощью LINQ, но почти все примеры LINQ, которые я видел, структурированы таким образом, что я не думаю, что они соответствуют моему коду.

Я ожидал написать код LINQ, например (пример из Интернета):

var query = from person in people
                 join pet in pets on person equals pet.Owner
                 select new { OwnerName = person.FirstName, PetName = pet.Name };

, но я не могу написать имена таблиц таким образом, не получив ошибку:

таблица не существует в текущий контекст.

Я хотел бы знать, что я делаю неправильно, в глобальном проекте, который я должен сделать, мне нужно добавить различные таблицы из разных баз данных в мой набор данных, а затем выполнить INNER , LEFT и RIGTH JOINS и многие другие манипуляции с данными, было бы очень полезно иметь прямой контроль над таблицами в коде, как это, похоже, дает этот последний пример. Добавляя этот DataSet в мой проект, я правильно последовал примеру, это правильно, потому что при отладке содержимого моего ds я получаю все содержимое своих таблиц.

Надеюсь, кто-то может помочь.

1 Ответ

0 голосов
/ 18 апреля 2020

Хорошо, так как в моем случае я просил ВНУТРЕННИЙ путь через LINQ и нашел решение, я выкладываю его, надеясь, что он кому-нибудь пригодится:

private void button1_Click(object sender, EventArgs e)

{ 
    openConnections(); // open connections for SqlCommands I'm using in this piece of code

    DataSet ds = new DataSet();

    SqlCommand command;
    command = new SqlCommand("SELECT * FROM [database1].[dbo].[articles]", connectionSQLDatabase1);
    SqlDataAdapter adapter = new SqlDataAdapter();
    adapter.SelectCommand = command;
    adapter.Fill(ds, "articles"); //articles becomes the Tables[0] in the ds DataSet

    SqlCommand command2;
    command2 = new SqlCommand("SELECT * FROM [database2].[dbo].[articles_Details]", connectionSQLDatabase2);
    SqlDataAdapter adapter2 = new SqlDataAdapter();
    adapter2.SelectCommand = command2;
    adapter2.Fill(ds, "articles_Details"); //articles becomes the Tables[1] in the ds DataSet


// LINQ code to query ds DataSet:

var query = from artic in ds.Tables["articles"].AsEnumerable()
            join artic_det in ds.Tables["articles_Details"].AsEnumerable()
            on artic.Field<int>("id_art") equals artic_det.Field<int>("id_art")

            select new
            {
                id_art_in_articles = artic.Field<int>("articles"),
                descr_article = artic.Field.Field<string>("description"),
                id_art_in_articles_Details = artic_det.Field<int>("articles_Details")
            };


     closeConnections(); // close connections for SqlCommands I'm using in this piece of code        

}

Затем выкладываю Консоль каждую запись, я мог убедиться, что это действительно ВНУТРЕННЕЕ СОЕДИНЕНИЕ среди двух таблиц.

...