Ошибка доступа запрещена при попытке подключения к Firebird в Visual Studio - PullRequest
1 голос
/ 01 апреля 2011

У меня недавно работает, что в Visual Studio я могу видеть Firebird в качестве поставщика данных.

Проект, над которым я работаю, я пытаюсь заставить работать встроенную версию Firebird в моей программе на c #

Однако, когда я захожу в Инструменты / Подключение к базе данных, выберите источник данных Firebird.Я ввожу следующий

Источник данных: Источник данных Firebird (поставщик данных .net Framework для Firebird) Источник данных: пусто Источник данных Порт: 3050 Диалект: 3 charSet: NONE База данных: путь к моему файлу fdb Тип сервера: Встроенный пользователь: имя пользователя. Я устанавливаю пароль: пароль. Я устанавливаю роль: пусто

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

Есть идеи о том, что может быть причиной этого?
Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Встроенная редакция базы данных открывает файлы базы данных в монопольном режиме (DenyRead, DenyWrite), серверная редакция делает то же самое.

Это по замыслу , нет никакого способа координации между двумя различными процессами базы данных, чтобы позволить открыть этот файл и успешно выполнять операции чтения / записи в параллельной среде. Если вы хотите разрешить различным процессам доступ к базе данных, вы должны сделать это, подключившись к серверной версии продукта Firebird.

Это верно и для вашей среды разработки . Если вы подключаете свою IDE к базе данных с помощью встроенного, а затем выполняете свое приложение с использованием также встроенного, приложение получит ошибку отказа в доступе, потому что файл будет открыт в IDE. Как вы, возможно, знаете, IDE и ваше приложение на самом деле являются разными процессами.

Другой возможный сценарий - это когда вы работаете с этой базой данных из FlameRobin или любым другим инструментом (используя версию сервера или встроенную версию), а затем пытаетесь открыть соединение из IDE, используя встроенную версию.

Из-за этого использование встроенной версии в среде разработки - плохая идея .

Я всегда использую там локальный сервер . Таким образом, я могу подключить свои инструменты базы данных IDE к базе данных (редко, но иногда я делаю это), любой другой инструмент, такой как isql, IBExpert, FlameRobin, я могу поддерживать открытые соединения из своего проекта и без проблем запускать тестирование / отладку .

Затем, если приложение будет использовать встроенную версию в рабочей среде, Я переключаюсь на эту версию во время фазы тестирования / вопросов и ответов и, конечно, в рабочей .

Я не использую Firebird из Visual Studio или .NET, поэтому я не уверен, что означает параметр Server Type: Embedded или как драйвер выбирает между сервером и встроенным, но что бы это ни было, вы должны изменяйте его только в своих выпусках, при использовании сервера в отладочных версиях.

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

1 голос
/ 01 апреля 2011

Я предполагаю, что вы пытаетесь подключиться с использованием компонента FBConnection, а приглашение к подключению выглядит как this

В этом случае вы называете «Источник данных» и говорите нам, что этопробел должен указывать на localhost для встроенной базы данных.Проверьте предоставленную мною ссылку для получения дополнительной информации.

Если вы не используете FbConnection, предоставьте дополнительную информацию о компоненте подключения и строке подключения.

РЕДАКТИРОВАТЬ

Читая информацию, которую вы добавляете в свои комментарии, кажется, что вы пытаетесь установить соединение с Firebird с помощью ADO.NET (не могу проверить это, так как у меня не установлена ​​Visual Studio на этом компьютере), что согласуется счто я предполагал ранее.

Когда вы конфигурируете соединение с базой данных Firebird, вы создаете строку соединения , которая используется вашими компонентами соединения, чтобы знать, как подключиться к базе данных (обратите внимание, что это относится и кнесколько других баз данных при настройке соединения).

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

Насколькокак я знаю, к Firebird можно получить доступ из .NET двумя способами:

  • Использование ADO.NET : в этом случае вам необходимо установить Data Source на локальный хост.Я думаю, что это ваш случай.

  • Использование ODBC через .NET : В этом случае соединение выглядит совсем иначе.Вы можете проверить это по предоставленным мною ссылкам, но сомневаюсь, что это применимо к вашему делу.

Итак, в короткой версии, пожалуйста, попробуйте установить «Источник данных» на localhost.

НТН

...