我使用以下连接字符串连接到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:无法 连接“
答案 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));
感谢。