Как выбрать информацию о пользователях для нескольких баз данных, используя ASP & VB.NET?
Хорошо, вот так.,, У меня есть веб-приложение, которое я разрабатываю в Microsoft Visual Web Developer с использованием ASP, VB.net и т. Д., Которое позволяет "Продавцам" размещать объявления для просмотра "Покупателями". Когда Покупатель ищет продукт, в каждом результате должно отображаться имя Продавца и информация о продукте. Проблема в том, что таблица, содержащая различную информацию о продукте, находится в одной базе данных, а информация о пользователе / членстве хранится в другой базе данных.
Я приведу пример. В этом случае Покупатель ищет все объявления для определенной книги.
- Каждое объявление заносится в базу данных db_1 и таблицу [Results] со столбцами для ID_USER и ID_BOOK.
- Информация о книге хранится в db_1 [Books] со столбцами для ID, TITLE, AUTHOR.
- Информация о пользователе хранится в отдельной базе данных 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'