Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение имен системных таблиц 
:(
    Опции темы
Georgich
Дата 12.3.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Приветствую.

Полностью название топика (не уместилось): Получение имен системных таблиц, имен их колонок и значений (ASP и MS SQL).

Здесь для меня вообще темный лес. Что дано и что надо. На форме три textbox'а: username, password, url. Username и password не относятся к БД (к ее connectionstring). Это аутентификация пользователя. Url, как мне объяснили, должно быть connectionstring (без логина и пароля) к БД. Т.е. мне надо вбить логин, пароль и эту самую строку для коннекта. Если все удачно, то вывести имена системных таблиц в ListBox, например. Далее, тыкая по любому имени таблицы в этом ListBox'е в DataGrid (или в каком-нибудь контроле, способном выводить два столбца) выводятся имена колонок этой таблицы и тип данных. Что-то вроде, как в этом мануале: http://msdn.microsoft.com/ru-ru/library/ms179932.aspx

Но, я пока не представляю как и откуда извлекать имена этих самых системных таблиц. Спасибо.
PM MAIL   Вверх
jonie
Дата 12.3.2011, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 3
Всего: 118



ну получаете коннекшен стринг, далее получаете список таблиц и, если надо, типы колонок в ней.
Код

select object_id,* from sys.tables where type='U'  --object_id это OBJECTID таблицы


--тут фильтруем по OBJECTID таблицы
select sc.* from sys.columns sc
join sys.types t on t.user_type_id = sc.user_type_id
join sys.tables st on st.object_id = sc.object_id



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Georgich
Дата 13.3.2011, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



jonie, собственно, мне надо этот самый коннекшн стринг вбить самому.
А вот как его правильно вбить, чтобы приконнектиться к системным БД (master, model, msdb)?

Спасибо.
PM MAIL   Вверх
jonie
Дата 13.3.2011, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 3
Всего: 118





--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Georgich
Дата 13.3.2011, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



jonie, спасибо, но я обошелся таким представлением:
Код

string connectString = "Server=Data Source=localhost\\SQLEXPRESS;Initial Catalog=master;Integrated Security=SSPI;";


Еще вопросец:
Есть страница с TextBox, в которую вводим конекшнстринг. Нажимаем кнопку, на следующей странице (ShowDB.aspx), в случае удачного коннекта, в листбокс добавятся имена таблиц. Сосбственно код извлечения и добавления где нужно писать? На странице с логином (Login.aspx) или уже в ShowDB.aspx?

Спасибо. 
PM MAIL   Вверх
jonie
Дата 13.3.2011, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 3
Всего: 118



Georgich, ну вообще вы законнектились от имени юзера, запустившего IIS, если только не сделали имперсонализацию....


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Georgich
Дата 13.3.2011, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



jonie, и что это значит? Я не смогу считать данные из системных таблиц или какие-то другие ограничения есть?
PM MAIL   Вверх
Freyzer
Дата 14.3.2011, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


обаятельный нахал
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 12.12.2009
Где: на Марсе

Репутация: 1
Всего: 1



Georgich

Я так понимаю, ты хочешь готового решения. Дам, но за деньги.


--------------------
Advocatus Dei smile. Advocatus Diaboli smileAjo!   
PM MAIL   Вверх
Georgich
Дата 14.3.2011, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Freyzer, если бы хотел, то заявил бы напрямую.
PM MAIL   Вверх
Georgich
Дата 15.3.2011, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Приветствую. Сначала код:
Код

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
                return;

            if (Page.PreviousPage != null)
            {
                ArrayList allData_ = GetTableList();
                ListBox1.DataSource = allData_;
                ListBox1.DataBind();
            }
        }

        protected ArrayList GetTableList()
        {
            ArrayList allData = new ArrayList();
            SqlDataReader myReader = null;
            SqlCommand getTableNamesCommand = new SqlCommand("SELECT name FROM dbo.sysobjects WHERE type = 'U' ORDER BY name", PreviousPage.connDB.GetDBConnection(PreviousPage.ConnectionString));
            myReader = getTableNamesCommand.ExecuteReader();

            if (myReader.HasRows)
            {
                foreach (DbDataRecord rezult in myReader)
                {
                    allData.Add(rezult.GetString(0));
                }
            }
            
            return allData;
        }

        protected Dictionary<string, string> GetColunmList()
        {
            Dictionary<string, string> allData = new Dictionary<string, string>();
            SqlDataReader myReader = null;
            string query = string.Format("SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '{0}' ORDER BY COLUMN_NAME", ListBox1.SelectedItem.ToString());
            SqlCommand getColunmNameCommand = new SqlCommand(query, PreviousPage.connDB.GetDBConnection(PreviousPage.ConnectionString));
            myReader = getColunmNameCommand.ExecuteReader();

            if (myReader.HasRows)
            {
                foreach (DbDataRecord rezult in myReader)
                {
                    allData.Add(rezult.GetString(0),rezult.GetString(1));
                }
            }

            return allData;
        }

        protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Dictionary<string, string> allData_ = GetColunmList();
            GridView1.DataSource = allData_;
            GridView1.DataBind();
        }

Это код страницы ShowDB.aspx, на которой происходит вывод списка имен системных таблиц в заданной БД. При выборе из листбокса отпределенной таблицы, в датагрид должны отобразиться имена ее колонок и типы данных их содержащих. В листбокс загрузка происходит нормально. Все добавляется. Но при выборе из списка имени таблицы (событие SelectedIndexChanged) происходит исключение на строке:
Код

SqlCommand getColunmNameCommand = new SqlCommand(query, PreviousPage.connDB.GetDBConnection(PreviousPage.ConnectionString));

Не задана ссылка на объект. Странно, ведь соединение с БД я создал и установил. Может быть дело в PreviousPage?

Спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0536 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.