什么是连接到本地db文件的连接字符串(.mdf)

时间:2018-05-06 08:28:29

标签: sql-server qt5

我使用以下连接字符串连接到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 :(得分:0)

经过一些研究后我找到了解决方案:

1-确保已安装Microsoft SQL Server 2016 LocalDB。

2-将连接字符串中的“Driver”更改为:

DRIVER={ODBC Driver 13 for SQL Server}

3-确保属性“AttachDbFileName”指向正确的数据库文件路径,尤其需要注意路径分隔符,而QT使用“/”但在Windows中必须使用“\”(“\\” )< - (这是我的主要问题)。

要解决此问题,请使用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));

感谢。