Узнайте, если это локальная машина - PullRequest
4 голосов
/ 07 января 2011

В моем приложении есть реализация, которая должна запускаться, только если мой исполняемый файл находится на том же компьютере, что и база данных.

У меня есть строка подключения, которая включает адрес сервера.В случае, когда это локальный компьютер, который может быть 127.0.0.1, localhost или что-то еще (например, псевдонимы).

Есть ли способ убедительно проверить, является ли сервер в моей строке подключениялокальная машина?

Ответы [ 3 ]

3 голосов
/ 07 января 2011

Принудительно local transport protocol (см. строка подключения ) вызовет локальное подключение.

Обратите внимание, что в FireBird 2.0 базовая реализация local transport protocol изменилась на XNET .
Вы не должны заметить каких-либо различий.

Примечание: не пытайтесь смешивать TCP/IP и local transport protocol для InterBase 6.0 и ниже, так как ошибка может вызвать данныекоррупция.
Смешивать эти два с Firebird должно быть хорошо.

- jeroen

0 голосов
/ 07 января 2011

А для совершенно другого подхода:

Создание двух хранимых процедур в базе данных.

  • Тот, который возвращает (настраиваемый) полный путь к текстовому файлу, локальному для компьютера, на котором работает база данных.
  • Тот, который записывает некоторые переданные в тексте в этот файл.

В вашем приложении:

  • вызов хранимой процедуры, которая возвращает имя файла
  • удалить этот файл на машине с исполняемым файлом
  • вызвать хранимую процедуру, которая записывает файл, и передать ему некоторый уникальный текст (предпочтительно уникальный для каждого вызова хранимой процедуры)
  • проверьте, что вы можете прочитать файл из локального расположения и что он содержит текст, который вы передали в хранимую процедуру

Просто помните о назначении дисков (поэтому проверьте, является ли диск в имени возвращаемого файла локальным, а не подключенным) и unc (имена компьютеров совпадают с именами локальных компьютеров). 1023 *

0 голосов
/ 07 января 2011

Просто установите IP-адрес базы данных в вашем соединении на 127.0.0.1.Если это не удается, это не локальная машина.

Примечание: это также может произойти сбой, если вы выполняете свой код на компьютере, на котором размещена эта база данных + база данных не настроена должным образом ...

...