Что такое строка подключения для подключения к локальному файлу БД (.mdf) - PullRequest
0 голосов
/ 06 мая 2018

Я использую следующую строку подключения для подключения к базе данных в экземпляре sqlserver SQLEXPRESS:

QString connStr = "DRIVER={SQL SERVER};SERVER=%1;DATABASE=%2;";

Но теперь я хочу подключиться к файлу базы данных SQL Server (.mdf), и я уже установил Microsoft SQL Server 2016 LocalDB. Какую строку подключения я должен использовать?


Я попробовал следующую строку подключения:

QString connStr = "DRIVER={SQL SERVER};SERVER=%1;AttachDbFileName=%2;"
db.setDatabaseName(connStr.arg("(LocalDB)\\v11.0",dbFilename));

И я также попробовал другой сервер:

db.setDatabaseName(connStr.arg("(LocalDB)\\MSSQLLocalDB",dbFilename));

Но ни один из них не работает и выдает ту же ошибку:

"[Microsoft] [Драйвер ODBC SQL Server] [DBNETLIB] SQL Server не выполняет существует или доступ запрещен. [Microsoft] [ODBC SQL Server Драйвер] [DBNETLIB] ConnectionOpen (Connect ()). QODBC3: невозможно подключить "

1 Ответ

0 голосов
/ 01 июня 2018

После некоторых исследований я нашел решение:

1- Убедитесь, что установлен Microsoft SQL Server 2016 LocalDB.

2- Измените «Драйвер» в строке подключения на:

DRIVER={ODBC Driver 13 for SQL Server}

3- Убедитесь, что атрибут AttachDbFileName указывает на правильный путь к файлу базы данных, особенно вам нужно обратить внимание на разделитель пути, тогда как QT использует "/", но в Windows вы должны использовать "\" ("\\" ) <- (Это была моя главная проблема). </p>

Чтобы избавиться от этой проблемы, используйте QDir::toNativeSeparators(dbFilename).

Так и после этих изменений строка подключения будет выглядеть так:

QString connStr = "DRIVER={ODBC Driver 13 for SQL Server};SERVER=%1;AttachDbFilename=%2;Integrated Security=true;";
db.setDatabaseName(connStr.arg("(localdb)\\MSSQLLocalDB").arg(dbFilename));

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...