Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > MSSQL LocalDB запуск экземпляра после перезагрузки


Автор: Gamlex 20.1.2015, 14:16
Пишу программку с использованием базы данных на MS SQL LocalDB. С созданием экземпляра разобрался, подключение программы к базе (файлу .mdf) тоже работает. Создаю именованный экземпляр следующим образом:

SqlLocalDB.exe create Base
SqlLocalDB.exe start Base
SqlLocalDB.exe info Base
Получаю именованный канал типа np:\\.\pipe\LOCALDB#A7D28F1F\tsql\query

В подключении к базе пишу именно этот канал.

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

P.S. При подключении типа (local)\Base - c++ builder в котором пишу программу выдаёт ошибку о невозможности подключения.
P.P.S. Автоматический экземпляр создавал, но он по-моему тоже отключается после перезагрузки.

Автор: Akina 20.1.2015, 16:39
Цитата(Gamlex @  20.1.2015,  15:16 Найти цитируемый пост)
При подключении типа (local)\Base - c++ builder в котором пишу программу выдаёт ошибку о невозможности подключения.

Какая версия .Net? Если 4.0.2 или старше - то подключайся к (localdb)\.\Base.
См. http://msdn.microsoft.com/ru-ru/library/hh510202.aspx
Иначе - придётся каждый раз энумеровать существующие каналы.

Автор: Gamlex 21.1.2015, 09:00
Цитата(Akina @  20.1.2015,  16:39 Найти цитируемый пост)
Какая версия .Net?


Стоит .Net Framework 4.5.1
SQL Management Studio подключается с именем сервера (localdb)\Base, а вот при подключении в программе к такому имени выдаёт ошибку (Сервер не существует или доступ запрещён). К именованному каналу (который меняется после каждой перезагрузки) подключается отлично.
К общим экземпляром (localdb)\.\Base не соединяется ни Management Studio, ни Билдер. 

Принципиально ли задание именно общего канала (с точкой)? Его нужно как то особенно создавать или это обычный именованный канал которому подключаются через \.\?

Автор: Akina 21.1.2015, 09:13
Цитата(Gamlex @  21.1.2015,  10:00 Найти цитируемый пост)
Принципиально ли задание именно общего канала (с точкой)? 

Ну я дал ссылку... там же ж пишут:
Цитата

Подключение к автоматическому экземпляру
Самым простым способом использования LocalDB является подключение к автоматическому экземпляру, владельцем которого является текущий пользователь, с использованием строки подключения "Server=(localdb)\MSSQLLocalDB;Integrated Security=true".  Для подключения к определенной базе данных с помощью имени файла выполните подключение с использованием строки подключения, аналогичной "Server=(LocalDB)\MSSQLLocalDB; Integrated Security=true ;AttachDbFileName=D:\Data\MyDB1.mdf". 

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


Цитата

Соединение с общим экземпляром LocalDB
Чтобы установить соединение с общим экземпляром LocalDB, добавьте в строку подключения сочетание .\ (точка + обратная косая черта), чтобы указать пространство имен, зарезервированное для общих экземпляров.  Например, чтобы соединиться с общим экземпляром LocalDB с именем AppData, укажите в строке подключения (localdb)\.\AppData. Пользователь, устанавливающий соединение с общим экземпляром LocalDB, который ему не принадлежит, должен иметь имя входа для проверки подлинности Windows или SQL Server. 

Предполагалось, что Вы прочитаете, поймёте, и разберётесь, к чему ВЫ подключаетесь, и соответственно какой использовать вид строки подключения.

Добавлено через 3 минуты и 14 секунд
Судя по последнему посту - Вы используете shared instance. Тогда точка не нужна, но нужен тайм-аут после первой попытки подключения и повторная попытка, чтобы инстанс проинитился. Обычно это 3-4 секунды, но лучше взять с запасом.

Автор: Gamlex 21.1.2015, 10:20
Ссылку я прочитал, по этой информации изначально и подключался. Странная штука - в Management studio подключение по имени (localdb)\Base проходит, а в Билдере пишет 
"Не выполнена  проверка соединения из за ошибки инициализации поставщика. [DBNETLIB][ConnectionOpen(Connect()).]SQL сервер не существует, или доступ запрещён."
Всё это я прописываю руками создавая строку подключения и проверяю соединение (см. рисунок), никакое ожидание там не помогает.


В принципе всё заработало, нужно было выставить другого провайдера (Native Client 11). Единственное - смущает задержка при первом подключении после перезагрузки. Думаю прописать команду инициализации экземпляра при запуске системы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)