Как выбрать информацию о пользователях для нескольких баз данных, используя ASP & VB.NET?

Хорошо, вот так.,, У меня есть веб-приложение, которое я разрабатываю в Microsoft Visual Web Developer с использованием ASP, VB.net и т. Д., Которое позволяет "Продавцам" размещать объявления для просмотра "Покупателями". Когда Покупатель ищет продукт, в каждом результате должно отображаться имя Продавца и информация о продукте. Проблема в том, что таблица, содержащая различную информацию о продукте, находится в одной базе данных, а информация о пользователе / ​​членстве хранится в другой базе данных.

Я приведу пример. В этом случае Покупатель ищет все объявления для определенной книги.

  1. Каждое объявление заносится в базу данных db_1 и таблицу [Results] со столбцами для ID_USER и ID_BOOK.
  2. Информация о книге хранится в db_1 [Books] со столбцами для ID, TITLE, AUTHOR.
  3. Информация о пользователе хранится в отдельной базе данных db_2 и в таблице [Users] со столбцами для ID и NAME.

Учитывая это, как бы я сделал что-то вроде следующего:


SELECT u.Name [Seller]
, b.Title [Title]
, b.Author [Author]
FROM db_1.Results r
INNER JOIN db_1.Books b
ON b.id = r.id_book
INNER JOIN db_2.Users u
ON u.id = r.id_user
WHERE b.Title like 'Some Book Title'

Если бы эти таблицы находились в одной и той же базе данных (что я сейчас и хотел бы сделать), я бы легко запустил внутреннее соединение или какой-то другой оператор выбора, чтобы получить только соответствующие данные. Я также подумал о создании наборов данных и их присоединении (например, http://www.vb-helper.com/howto_net_dataset_foreign_key.html), но разве это не будет слишком тяжело для сервера?

Я наполовину приличен с операторами SQL, но все мои знания получены от Google и из практики, поэтому, если я игнорирую некоторые важные предостережения, о которых знает каждый классически обученный программист, я прошу прощения. Заранее благодарю за помощь.

ОБНОВЛЕНИЕ: я думал, что дам обновление на ситуации. Проблема на самом деле не имеет ничего общего с разрешениями. Проблема заключалась в том, что VWD не смог найти объект. Я решил эту проблему, используя CROSS JOIN и явно указав путь к каталогу файла.mdf в операторе select. Еще раз спасибо за вашу помощь.

2 ответа

Решение

Вот простые шаги для использования одного и того же пользователя в базе данных и предоставления права выбора с помощью инструмента управления сервером sql

  • перейдите в db1 > безопасность> пользователи> новый пользователь.
  • Нажмите имя пользователя и просмотрите имя и выберите пользователя, которого вы хотите использовать
  • перейдите в db2 > security > users > new user.
  • Нажмите на имя пользователя и просмотрите имя и выберите того же пользователя из db1 выше
  • Идти к user table в db2 щелкните правой кнопкой мыши и перейдите в свойства, щелкните разрешения и нажмите кнопку поиска, чтобы найти того же пользователя сверху и выбрать этого пользователя.
  • В поле "Пользователь или роли" выберите пользователя, затем перейдите на панель разрешений ниже, выберите "Предоставить" и нажмите "ОК".

Повторите последний шаг для всех таблиц, которые вы хотите, чтобы пользователь базы данных имел доступ из базы данных 2

Ваш запрос будет работать с небольшим изменением, как указывает @rs выше. Порция dbo посередине между именем базы данных и именем таблицы находится имя владельца объектов. Если владелец имеет права на обе схемы, а ваш идентификатор пользователя имеет права на выбор из обеих баз данных, запрос будет работать.

SELECT u.Name [Seller]
, b.Title [Title]
, b.Author [Author]
FROM db_1.dbo.Results r
INNER JOIN db_1.dbo.Books b
ON b.id = r.id_book
INNER JOIN db_2.dbo.Users u
ON u.id = r.id_user
WHERE b.Title like 'Some Book Title'
Другие вопросы по тегам