SQL-оператор для проверки на возможность соединения?

Когда задание запускается созданием набора патчей, вы можете начать с проверки переменной $ GERRIT_CHANGE_SUBJECT и, если это так, остановить процесс.

7
задан John Topley 4 November 2008 в 12:42
поделиться

9 ответов

Большинство баз данных SQL имеет 'таблицу' с этой целью.

В DB2 это:

select * from sysibm.sysdummy1

в то время как Oracle имеет, из памяти,

select * from dual

Это будет зависеть от базы данных в бэкэнде.

5
ответ дан 6 December 2019 в 10:04
поделиться

Вы могли сделать это:

Select 1

Хорошо, как насчет того, чтобы отправить пустую строку или пробел. Это - допустимые команды для SQL-сервера.

8
ответ дан 6 December 2019 в 10:04
поделиться

Самый простой метод должен выполнить выбор, который ничего не делает.

SELECT N'Test'
2
ответ дан 6 December 2019 в 10:04
поделиться

Потеря возможности соединения может произойти в любое время.

Что, если предложенные операторы SELECT выполняются прекрасный, но соединение сразу повреждается после (успешно) выполнения их?

2
ответ дан 6 December 2019 в 10:04
поделиться

Необходимо получить ошибку, если Вы не можете открыть новое соединение, потому что дб недоступен.

Это звучит мне как Вы, сохраняют соединение открытым все время (который обычно является плохой идеей - новое соединение должно быть открыто, прежде чем пакет выполняется). Имеет место это?

1
ответ дан 6 December 2019 в 10:04
поделиться

выберите getdate ()

1
ответ дан 6 December 2019 в 10:04
поделиться

Было бы лучше поймать Вашу реализацию не - соединенное исключение для КАЖДОГО sql оператора, который Вы выполняете, вместо того, чтобы использовать фиктивный оператор для тестирования на возможность соединения. Я видел системы, где вверх 10% базы данных процессорное время потрачен, ответив на эти фиктивные запросы.

0
ответ дан 6 December 2019 в 10:04
поделиться

Код 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;
0
ответ дан 6 December 2019 в 10:04
поделиться

Один способ узнать, существует ли соединение с базой данных все еще на самом деле, состоит в том, чтобы попытаться выполнить некоторую операцию на соединении. Если соединение умерло, свойство 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 изменения свойства в "Закрытом" однажды этот тип операции выполняются и перестали работать, таким образом, можно затем проверить состояние, если Вы хотите также.

Надежда, которая помогает.

0
ответ дан 6 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: