powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Соединение с сервером
18 сообщений из 18, страница 1 из 1
Соединение с сервером
    #32951768
Urt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне дали задание, но я не могу задавать по нему вопросы, поэтому я обращаюсь
к вам как к спецам.(т.к. не совсем ясно, что от меня требуется)
Вот оно:
1) Нужно установить соединение с сервером.
2) Вывести все базы данных (схемы в случае Oracle), доступные пользователю.
3) Найти все таблицы в базе данных (схеме в случае Oracle), кроме системных.
Ну и далее, приложение должно уметь (со стороны клиента) создавать/удалять таблицу, редактировать её и т.п.

Мои вопросы:
1)Что значить "установить соединение с сервером" - может быть, имеется в виду, что должен быть Web service, который будет предоставлять требуемые
услуги? Или что-то другое?
2) Как найти все базы данных на сервере, доступные пользователю?
И все таблицы, в них содержащиеся?
...
Рейтинг: 0 / 0
Соединение с сервером
    #32951841
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конкретно по Oracle

1. "Установить соединение с сервером" - значит подключиться к нему. К Web-сервису, в общем случае, не имеет никакого отношения. Конкретная реализация зависит от используемого клиентского средства

2.
Код: plaintext
1.
2.
3.
SELECT * FROM user_tables -- все таблицы текущего пользователя
...                   all_tables   -- все таблицы, доступные пользователю
...                   dba_tables  -- все таблицы (естественно, д.б. админ. привилегии)
...
Рейтинг: 0 / 0
Соединение с сервером
    #32951893
Urt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Дело в том, что нужно найти все доступные БД, не только Oracle.
2)user_tables, all_tables, dba_tables - это что, стандартно для Oracle, и что такое вообще схемы Oracle?
...
Рейтинг: 0 / 0
Соединение с сервером
    #32951938
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Urt1) Дело в том, что нужно найти все доступные БД, не только Oracle.
2)user_tables, all_tables, dba_tables - это что, стандартно для Oracle, и что такое вообще схемы Oracle?

1. Не знаю, как для MS SQL, но, в общем случае, задача не тривиальная (конкретно, по Oracle когда-то обсуждали в форуме, но нормального решения, в общем случае так и не нашли - как мне помнится).
Хотя, смотря что понимать под базой данных, судя по фразе
Вывести все базы данных (схемы в случае Oracle) .
Например, в dBase под базой данных понимался, насколько помню, один dbf-файл

2. Да, стандартно. Схема - это набор объектов (таблицы, индексы, представления и др.), принадлежащие конкретному пользователю (имена пользователя и схемы совпадают)
...
Рейтинг: 0 / 0
Соединение с сервером
    #32951962
Urt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что, единственное решение - создать на сервере БД (любую), в которой будет храниться список всего, что мы имеем - для Oracle, MS SQL и т.д.,
для каждого генерировать свой код - OleDbConnection.ConnectionString и
иже с ним? Это же сдохнуть можно! Нет ли более универсальнлй возможности?
...
Рейтинг: 0 / 0
Соединение с сервером
    #32952006
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Urt - вы абсолютно уверены, что правильно поняли задание ?
Потому что на одном _сервере_ баз данных может существовать _несколько_ баз данных.
Очень похоже, что вам нужно подключиться к серверу Oracle и опубликовать список баз, доступных пользователю.
...
Рейтинг: 0 / 0
Соединение с сервером
    #32952015
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять же по Oracle, т.к. в MS SQL не силен.

Если я сажусь за незнакомую машину, которая имеет доступ к Oracle, я ищу директорий ORACLE_HOME\network\admin. Там д.б. файл sqlnet.ora, в котором задается метод доступа к Oracle (т.к. они могут быть различны). Самый распространенный - c пом. файла tnsnames.ora, который находится там же (однако есть и другие методы - с пом. файла hosts и с пом. LDAP-directory). В этом файле прописаны пути к базам. Но это не абсолют - я могу прописать доступ к базе, которая в настоящий момент не используется. Проверить, возможен ли доступ к прописанной базе можно с пом. команды tnsping <alias>. Если я нахожусь непосредственно на сервере, то там вместо tnsnames.ora можно смотреть файл listener.ora и т.д..... Т.е. я себе не представляю, как можно решить задачу в общем виде да еще программным путем
...
Рейтинг: 0 / 0
Соединение с сервером
    #32952022
Urt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey KudinovОчень похоже, что вам нужно подключиться к серверу Oracle и опубликовать список баз, доступных пользователю.

Не совсем то - сначала указывается сервер - в диалоговом окне(это может быть Oracle, MS SQL или что-то другое), а я должен выдать пользователю все доступные ему БД, предоставить возможность их менять(если у него есть права) и т.п.
...
Рейтинг: 0 / 0
Соединение с сервером
    #32952033
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень похоже, что вам нужно подключиться к серверу Oracle и опубликовать список баз, доступных пользователю

Не совсем так. Базой данных управляет экземпляр (instance), которых действительно может быть несколько на одной машине (еще несколько экземпляров могут работать с одной базой, но сейчас об этом говорить не будем). Причем в конктретный момент времени часть экземпляров м.б. запущена, а часть нет. Узнать в общем случае, сколько экземпляров живут в настоящий момент, нельзя иначе, кроме как попробовать законнектиться к каждому из них.
...
Рейтинг: 0 / 0
Соединение с сервером
    #32952052
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Urt Alexey KudinovОчень похоже, что вам нужно подключиться к серверу Oracle и опубликовать список баз, доступных пользователю.

Не совсем то - сначала указывается сервер - в диалоговом окне(это может быть Oracle, MS SQL или что-то другое), а я должен выдать пользователю все доступные ему БД, предоставить возможность их менять(если у него есть права) и т.п.

Не совсем удачный способ, т.к. в зависимости от сервера м.б. разные возможности работы с ними (вплоть до отличий в SQL). Впрочем, не хочу затевать дискуссию на эту тему, т.к. это неоднократно обсуждалось в "Сравнение СУБД", "Проектировании СУБД", "Delphi" (это где я видел)
...
Рейтинг: 0 / 0
Соединение с сервером
    #32952084
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55Не совсем удачный способ, т.к. в зависимости от сервера м.б. разные возможности работы с ними (вплоть до отличий в SQL). Думаю, что не надо делать это на уровне SQL.

2 Urt
Раз вопрос стоит так, то пусть создатели OLEDB провайдеров позаботятся о придостовлении соответствующего интерфейса по схеме. Например
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim DatabaseConnection As New System.Data.OleDb.OleDbConnection
        Dim SchemaTable As DataTable

        DatabaseConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                "Data Source=E:\My Documents\db1.mdb"

        DatabaseConnection.Open()

        SchemaTable =
DatabaseConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, _
                   New Object() {Nothing, Nothing, Nothing, Nothing})

        Dim RowCount As Int32
        For RowCount =  0  To SchemaTable.Rows.Count -  1 
            Console.WriteLine(SchemaTable.Rows(RowCount)!TABLE_NAME.ToString)
        Next RowCount

        DataGrid1.DataSource = SchemaTable

        DatabaseConnection.Close()
...
Рейтинг: 0 / 0
Соединение с сервером
    #32952091
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Соединение с сервером
    #32959547
Urt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я узнал, как это для MS SQL можно - хранимая процедура -
кажется, sp_tables - возвращает все БД; а с помощью
INFORMATION_SCHEMA.TABLES узнаём все таблицы в ней. Ура!
...
Рейтинг: 0 / 0
Соединение с сервером
    #32959590
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrtЯ узнал, как это для MS SQL можно - хранимая процедура -
кажется, sp_tables - возвращает все БД; а с помощью
INFORMATION_SCHEMA.TABLES узнаём все таблицы в ней. Ура! Вы все-таки хотите сделать это с помощью SQL ?

sp_databases - список баз, к которым пользователь имеет доступ
sp_tables - список таблиц текущей БД, к которым пользователь имеет доступ
...
Рейтинг: 0 / 0
Соединение с сервером
    #32959598
Urt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Kudinov UrtЯ узнал, как это для MS SQL можно - хранимая процедура -
кажется, sp_tables - возвращает все БД; а с помощью
INFORMATION_SCHEMA.TABLES узнаём все таблицы в ней. Ура! Вы все-таки хотите сделать это с помощью SQL ?



Нет, нужно и для других, но первый вариант моего application уже работает
для MS SQL, что уже приятно. Попробую теперь с GetOleDbSchemaTable.
...
Рейтинг: 0 / 0
Соединение с сервером
    #32959623
Urt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё - кажется, этим методом мы узнаём все таблицы в БД, но не все БД -
ведь в Connection.ConnectionString указывается имя БД, которого мы ещё не знаем.
...
Рейтинг: 0 / 0
Соединение с сервером
    #32959661
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UrtИ ещё - кажется, этим методом мы узнаём все таблицы в БД, но не все БД -
ведь в Connection.ConnectionString указывается имя БД, которого мы ещё не знаем. А это имя можно опустить. Произойдет подключение к Default database
Попробуйте
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim DatabaseConnection As New System.Data.OleDb.OleDbConnection
        Dim SchemaTable As DataTable

        DatabaseConnection.ConnectionString = "Provider=sqloledb;" & _
                                                "Data Source=(local);" & _
                                                "Integrated Security=SSPI"

        DatabaseConnection.Open()

        'Retrieve schema information about the database catalogs.
        SchemaTable = DatabaseConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Catalogs, Nothing)

        Dim RowCount As Int32
        For RowCount =  0  To SchemaTable.Rows.Count -  1 
            Console.WriteLine(SchemaTable.Rows(RowCount)!CATALOG_NAME.ToString)
            Console.WriteLine(SchemaTable.Rows(RowCount)!DESCRIPTION.ToString)
        Next RowCount

        DataGrid1.DataSource = SchemaTable

        DatabaseConnection.Close()
...
Рейтинг: 0 / 0
Соединение с сервером
    #32960020
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>ведь в Connection.ConnectionString указывается имя БД, которого мы ещё не знаем

в MS SQL соединяйся с БД master - там и получишь всю инфу об имеющихся базах

Шайтан
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Соединение с сервером
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]