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

Posted

技术标签:

【中文标题】连接到本地 db 文件 (.mdf) 的连接字符串是啥【英文标题】:What is the connection string to connect to local db file (.mdf)连接到本地 db 文件 (.mdf) 的连接字符串是什么 【发布时间】:2018-05-06 08:28:28 【问题描述】:

我在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 没有 存在或访问被拒绝。 [微软][ODBC SQL 服务器 驱动程序][DBNETLIB]ConnectionOpen (Connect())。 QODBC3:无法 连接”

【问题讨论】:

签出connectionstrings.com 我已经查过了,Qt有不同风格的连接字符串。我尝试了不同的连接字符串,但没有一个对我有用。 任何帮助将不胜感激。如果问题不够清楚,请告诉我。 请告诉我们您用于本地数据库的实际连接字符串 @Squirrel - 我已经更新了问题。 【参考方案1】:

经过一番研究,我找到了解决方案:

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

2- 将连接字符串中的“驱动程序”更改为:

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));

谢谢。

【讨论】:

以上是关于连接到本地 db 文件 (.mdf) 的连接字符串是啥的主要内容,如果未能解决你的问题,请参考以下文章

带有本地 db .mdf 文件的 Web 应用程序如何发布到 Azure

如何连接到 MDF 数据库文件?

使用 RobotFramework 连接到 H2 数据库文件

如何发布带有数据库 (.mdf) 的 3 层 WinForms 应用程序?

LinqPad 可以连接到 mdf 文件吗?

连接到 postgresql:dbserver db 通过 JDBC 连接到 Databricks 时连接被拒绝