Когда задание запускается созданием набора патчей, вы можете начать с проверки переменной $ GERRIT_CHANGE_SUBJECT и, если это так, остановить процесс.
Большинство баз данных SQL имеет 'таблицу' с этой целью.
В DB2 это:
select * from sysibm.sysdummy1
в то время как Oracle имеет, из памяти,
select * from dual
Это будет зависеть от базы данных в бэкэнде.
Вы могли сделать это:
Select 1
Хорошо, как насчет того, чтобы отправить пустую строку или пробел. Это - допустимые команды для SQL-сервера.
Самый простой метод должен выполнить выбор, который ничего не делает.
SELECT N'Test'
Потеря возможности соединения может произойти в любое время.
Что, если предложенные операторы SELECT выполняются прекрасный, но соединение сразу повреждается после (успешно) выполнения их?
Необходимо получить ошибку, если Вы не можете открыть новое соединение, потому что дб недоступен.
Это звучит мне как Вы, сохраняют соединение открытым все время (который обычно является плохой идеей - новое соединение должно быть открыто, прежде чем пакет выполняется). Имеет место это?
Было бы лучше поймать Вашу реализацию не - соединенное исключение для КАЖДОГО sql оператора, который Вы выполняете, вместо того, чтобы использовать фиктивный оператор для тестирования на возможность соединения. Я видел системы, где вверх 10% базы данных процессорное время потрачен, ответив на эти фиктивные запросы.
Код Delphi в качестве примера, которому я доверяю, будет легко адаптировать:
function IsConnValid(var Conn: TADOConnection; DBType: TDBType): boolean;
var
qry : TADOQuery;
begin
//gimme a connection, and i'll create a query, try to retrieve dummy data.
//if retrieval works, return TRUE. otherwise, return FALSE.
qry := TADOQuery.Create(nil);
try
qry.Connection := Conn;
case DBType of
//syntax for a dummy query varies by vendor.
dbOracle : qry.Sql.Add('SELECT 1 FROM DUAL');
dbSqlServer : qry.Sql.Add('SELECT 1');
end; //case
try
qry.Open;
//try to open the query.
//if we lost the connection, we'll probably get an exception.
Result := not(qry.Eof); //a working connection will NOT have EOF.
qry.Close;
except on e : exception do
//if exception when we try to open the qry, then connection went bye-bye.
Result := False;
end; //try-except
finally
qry.Free;
end; //try-finally
end;
Один способ узнать, существует ли соединение с базой данных все еще на самом деле, состоит в том, чтобы попытаться выполнить некоторую операцию на соединении. Если соединение умерло, свойство ConnectionState все еще остается как "Открытое", но когда Вы попытаетесь сделать что-то с ним, Вы получите свое исключение. Например:
SqlConnection sqlConn;
private bool dbConnectionExists() {
try
{
sqlConn.ChangeDatabase("MyDBname");
return true;
}
catch
{
return false;
}
}
private void button1_Click(object sender, EventArgs e)
{
if (dbConnectionExists())
{
// Connection ok so do something
}
}
connectionState изменения свойства в "Закрытом" однажды этот тип операции выполняются и перестали работать, таким образом, можно затем проверить состояние, если Вы хотите также.
Надежда, которая помогает.