powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Oracle.ManagedDataAccess.Client.OracleCommand - проверка на Prepared?
5 сообщений из 5, страница 1 из 1
Oracle.ManagedDataAccess.Client.OracleCommand - проверка на Prepared?
    #40042454
NordRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток всем.
Имею WinForm приложение и БД Oracle, к которой нужно корректно подключиться. "Корректно" это вот так: если в момент выдачи очередного запроса кто-то выдернет сетевой шнур сервера из розетки, программа у клиента не должна зависнуть, а должна перейти в режим тестирования связи с сервером (в цикле ping, затем tnsping, затем select 1 from dual) и после того как сервер снова оживёт, автоматически обратно законнектиться и продолжить работу. Для этих целей написан код внизу, который выполняется в начале каждого обращения к БД из окон программы.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 private static Oracle.ManagedDataAccess.Client.OracleConnection oconn;
 private static Oracle.ManagedDataAccess.Client.OracleCommand ocmd;

            do try {
                if (oconn.State == ConnectionState.Closed) oconn.Open();
                if ((SQL.Length > 0) && (ocmd.CommandText != SQL)) ocmd.CommandText = SQL;   
                // вставить проверку: если уже Prepared, повторно Prepare() не выдавать, чтобы не валить сервер разборами запросов.
                ocmd.Prepare(); 
            } catch (Exception e) { 
                if (!uConnectTest.ConnectTest(null, e.Message)) {
                    Cursor.Current = Cursors.Default;
                    return false; 
                };
            } while (oconn.State != ConnectionState.Open); // вставить проверку успешности Prepare()


В цикле в блоке try/catch выполняются oconn.Open(), затем ocmd.Prepare().
Выход из цикла должен состояться только при условии успешности обоих команд.
Я знаю, как проверить успешность первой из них (oconn.State != ConnectionState.Open)

Вопрос:
Как проверить, что OracleCommand.Prepare() успешно выполнено сервером и можно уже присваивать параметры/выполнять запрос?
Или по-другому спрошу: как узнать, что OracleCommand уже находится в состоянии Prepared?

Буду признателен за рекомендации или тычок куда смотреть.
...
Рейтинг: 0 / 0
Oracle.ManagedDataAccess.Client.OracleCommand - проверка на Prepared?
    #40043808
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Сделайте свою перменную cbPrepared = true и проверяйте
2. Делать повторную Препаре надо при некоторых условиях
https://stackoverflow.com/questions/5818619/what-does-sqlcommand-prepare-do-and-when-should-it-be-used
...
Рейтинг: 0 / 0
Oracle.ManagedDataAccess.Client.OracleCommand - проверка на Prepared?
    #40043889
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ли вообще профит от Prepared?
...
Рейтинг: 0 / 0
Oracle.ManagedDataAccess.Client.OracleCommand - проверка на Prepared?
    #40044098
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Есть ли вообще профит от Prepared?


есть, конечно, особенно, если много параметров,
т.е.
параметры меняются и только execute
...
Рейтинг: 0 / 0
Oracle.ManagedDataAccess.Client.OracleCommand - проверка на Prepared?
    #40045027
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NordRus,

всё сделано , неправильно, вам нужно при получении определённого исключения от текущего бизнес запроса , просто повторять его через определённый промежуток времени при этом выводить пользователю соответствующее сообщение

ЗЫ static connection - это жесть, не делайте так никогда
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Oracle.ManagedDataAccess.Client.OracleCommand - проверка на Prepared?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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