Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,139
Записей в блоге: 1
MS SQL

Проверка подключения/авторизации/наличия объектов на сервере

31.07.2023, 13:39. Показов 1728. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Есть WinForms приложение, запрашивающее данные с сервера. Для его успешного функционирования нужно:
1. Доступность SQL сервера
2. Наличие определенной БД/учетных записей/прав доступа (стороннее серверное ПО установлено корректно)
3. Наличие кастомной хранимой процедуры, посредством которой запрашиваются данные.

Есть ли устоявшиеся практики на счет таких проверок?

Кликните здесь для просмотра всего текста
Сценарий: пользователь сконфигурировал подключение к серверу в приложении и нажал кнопку "Проверить". В случае неудачи приложение выводит сообщение, что именно пошло не так.


Ну то есть если начать с самого низа: какие могут быть методы на уровне DAL? Что они должны возвращать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.07.2023, 13:39
Ответы с готовыми решениями:

Проверка наличия файла на сервере
Подскажите, можно ли как-то проверить существует ли файл на сервере? (БЕЗ СКАЧИВАНИЯ файла) Пример исходных данных: ...

Проверка наличия подключения к Интернету
Надо узнать есть ли соединение с интернетом. Подойдет любой способ с ping или с другим (если такие существует), можно даже через другую...

Проверка наличия пользователя на сервере дискорд
Каким образом можно проверить наличие пользователя на сервере дискорд, на котором находится сам бот, зная айди пользователя? Я читал...

34
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,046
01.08.2023, 09:24
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от NewOrdered Посмотреть сообщение
А если конфигурацию создает пользователь во время работы? Как проверить ее валидность?
Что имеется в виду?
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,139
Записей в блоге: 1
01.08.2023, 09:30  [ТС]
Usaga,
Сценарий: пользователь сконфигурировал подключение к серверу в приложении и нажал кнопку "Проверить". В случае неудачи приложение выводит сообщение, что именно пошло не так.
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,046
01.08.2023, 09:41
NewOrdered, ну, в таких кейсам обычно только подключение к СУБД проверяют. От силы ещё (если база позволяет) - версию схемы базы. Ну и всё. А какие-то проверки структуры базы производить... Зачем?

И что за кейс такой, что пользователь конфигурирует такие системно значимые вещи?
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,139
Записей в блоге: 1
01.08.2023, 10:48  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
И что за кейс такой
Есть сторонний сервер (источник данных). На нем установлены MSSQL сервер и стороннее серверное ПО, которое требуемые данные собирает и хранит.
Я написал десктопное приложение-клиент, которое эти данные запрашивает и отображает (типа дашборда). Пользователь в приложении сам добавляет источники данных (сервера): имя/адрес хоста, тип аутентификации и при необходимости учетные данные.
На стороне сервера также есть кастомная ХП, которую вызывает клиент при запросе данных. На клиенте это не конфигурируется, но она должна присутствовать, иначе приложение не будет работать.
Так вот смысл исходного вопроса: как проверить, что введенное пользователем работоспособно, включая наличие ХП на стороне сервера. Разумеется это станет ясно, когда клиент начнет опрос, но я хотел дать пользователю возможность проверить на этапе конфигурирования.
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,046
01.08.2023, 10:54
NewOrdered, ну, если вопрос только в ОДНОЙ хранимке, то её наличие можно проверять и создавать, если права на сервере СУБД позволяют...

Хранимка же это обычный объект в базе, который можно чекнуть в информационной схеме. Но вообще: а не лучше текст запроса с клиента посылать? Тогда не надо греть голову хранимкой. Или так что-то громоздкое? Или DBA какой-то эти хранимки менять может по ходу дела?
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
01.08.2023, 10:59
Цитата Сообщение от NewOrdered Посмотреть сообщение
но я хотел дать пользователю возможность проверить на этапе конфигурирования.
Запустите метод по кнопке Test Connection. Отработает - всё хорошо, вылетит исключение - что-то не так...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public async Task TestMethod(string connectionString)
{
 
    try
    {
        using (SqlConnection sqlConnection = new SqlConnection(connectionString))
        {
            await sqlConnection.OpenAsync();
        }
    }
    catch (SqlException sqlEx)
    {
        throw new ApplicationException(string.Format("T-SQL #{0} - {1}", sqlEx.Number, sqlEx.Message));
    }
    catch (Exception ex)
    {
        throw new ApplicationException(ex.Message);
    }
}
Из sqlConnection можно еще вывести всякие нужные данные...
1
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,046
01.08.2023, 11:01
Andrey-MSK, ему надо не просто подключение к базе, но и наличие хранимки проверить. Но это одним запросом можно сделать. Оно и корректность строки подключения проверит, и наличие хранимки.
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,139
Записей в блоге: 1
01.08.2023, 11:13  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
ну, если вопрос только в ОДНОЙ хранимке, то её наличие можно проверять и создавать, если права на сервере СУБД позволяют...
Ну там при проработке еще один User Defined Table Type нарисовался.. В целом идея правильная, но администрирование СУБД out of my scope как говорится.

Цитата Сообщение от Usaga Посмотреть сообщение
Но вообще: а не лучше текст запроса с клиента посылать? Тогда не надо греть голову хранимкой.
Как раз хотел уйти от хранения/формирования запросов на клиенте. Как результат - новая головная боль.

Добавлено через 3 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Но это одним запросом можно сделать.
это было бы оптимально
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,758
Записей в блоге: 4
01.08.2023, 11:16
NewOrdered,
Цитата Сообщение от Usaga Посмотреть сообщение
Но это одним запросом можно сделать.
Проверяйте наличие объекта БД с помощью этого
T-SQL
1
2
IF OBJECT_ID('dbo.MyTable', 'U') IS NOT NULL 
-- Далее что вам надо с этим делать
И по результатам принимайте решение...

Добавлено через 1 минуту
NewOrdered, Это для MS SQL Server
1
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,046
01.08.2023, 11:25
Цитата Сообщение от NewOrdered Посмотреть сообщение
Как раз хотел уйти от хранения/формирования запросов на клиенте. Как результат - новая головная боль.
Ну так это наоборот снятие головной боли. Не нужно проверять наличие хранимки, если она не требуется. Есть объективные причины, почему не можно запрос к клиента посылать?
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,139
Записей в блоге: 1
01.08.2023, 11:41  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Есть объективные причины, почему не можно запрос к клиента посылать?
Наверное нет. Только (выдуманная мной) оптимизация.
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,046
01.08.2023, 11:43
NewOrdered, ну, вот одна из возможностей упростить себе жизнь. Не надо проверять хранимку, создавать, обновлять, если логика запроса изменится...
0
HF
 Аватар для HF
1342 / 926 / 202
Регистрация: 09.09.2011
Сообщений: 2,751
Записей в блоге: 2
01.08.2023, 12:25
Всё прочитал, так и не понял почему ТС себе пытается усложнить задачу. Usaga в каждом сообщении давал чёткие и понятные ответы. Где-то нужно просто волевое решение не усложнять; где-то нужно просто заложить чёткую структуру и не пытаться её проверять и доделывать. А то получается что вроде бы процедура должна быть, но почему-то мы её всё-таки проверим. Ну дак и проверишь. Пользователь завёл новое подключение - сразу выполнил запрос и сказал что он написал какую-то дрянь и это не будет работать.

Цитата Сообщение от Usaga Посмотреть сообщение
ему надо не просто подключение к базе, но и наличие хранимки проверить. Но это одним запросом можно сделать. Оно и корректность строки подключения проверит, и наличие хранимки.
Вот, это помоему, и есть ответ. Я тоже так же хотел сказать, дочитав до конца темы.
0
Эксперт .NET
 Аватар для Usaga
14784 / 9558 / 1366
Регистрация: 21.01.2016
Сообщений: 36,046
01.08.2023, 12:46
NewOrdered, кстати, хочу добавить ещё несколько вещей.

Проверка наличия хранимки подразуемевает, что твой сервис сможет её создать, в случае отсутствия. Но для этого у него должны быть права на изменение схемы базы, чего не требуется для обычной работы твоего дашборда. Это - первый момент. Ослабление защиты базы, причём серьёзное.

Второй момент. Ты можешь проверить наличие хранимки, но ты не можешь проверить её актуальность (версию). Запрос же может меняться со временем. Как ты тут поступишь? Запросишь текст хранимки (если она в базе без флага ENCRYPTED, тогда не запросишь) и сравнишь с тем, что в сервисе хранится? А если они разлечаются, тогда что? Какая хранимка актуальнее? В базе или в программе? Версию хранимки ещё в базе хранить? Тогда уже две сущности нужно поддерживать.

Ну и третий момент. Ты сам не можешь сказать, зачем именно хранимка нужно. Получается, что первые два пункта призваны решить проблему, который как бы и нет. Так получается?

Поэтому мой совет: не занимайся фигнёй с этой хранимкой и проверками. Посылай в базу запрос на выгребание данных. Или серию запросов. И всё. Нет проблемы.
1
01.08.2023, 14:20  [ТС]

Не по теме:

Цитата Сообщение от HF Посмотреть сообщение
Всё прочитал, так и не понял почему ТС себе пытается усложнить задачу.
Так вопрос и был задан с целью разобраться и если надо - упростить.
Цитата Сообщение от HF Посмотреть сообщение
Usaga в каждом сообщении давал чёткие и понятные ответы.
А я с ним не спорил и в целом согласен с его аргументацией

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.08.2023, 14:20

Проверка наличия подключения к интернет-сети
Всем привет! Сильно не ругайтесь,но мне нужна помощь,т.к. занимаюсь этим пару месяцев а успехов в себе не вижу.Так вот как написать...

Проверка наличия файла на сервере локальной сети.
Локальная сеть. Необходимо проверить наличие файла на сервере. Если запустить штатным способом, и при этом сервер допустим недоступен (не...

Как настроить PAC скрипт для подключения к прокси с использованием авторизации на сервере?
Форумчане, скажите, пожалуйста, удалось ли кому-то из вас создать такой PAC скрипт для настройки подключения к прокси, который бы умел...

Работа с командной строкой (1. FTP-сервер 2. Проверка наличия подключения)
имеется совет: Для восстановления конфигурации выполните команду: put rom-0, например put c:\config\660hw.cfg rom-0 ftp>...

Проверка наличия шрифта в системе и установить если отсуствует + проверка запущен ли проект с правами админа
Здравствуйте. Как можно проверить наличия шрифта в системе и установить его если отсуствует. Ну плюс еще проверить запущен ли проект от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru