重装QT后QSqlDatabase数据库连接失败求助
重装Qt后ODBC数据库连接失败问题
我因调试器故障重装了Qt,未修改任何数据库连接器相关代码,但现在无法连接SQL Server数据库,报错提示驱动未找到。
头文件(databaseconnector.h)
// databaseconnector.h #ifndef DATABASECONNECTOR_H #define DATABASECONNECTOR_H #include <QObject> #include <QSqlDatabase> #include <QSqlQuery> class DatabaseConnector : public QObject { Q_OBJECT public: explicit DatabaseConnector(QObject *parent = nullptr); ~DatabaseConnector(); bool connectToDatabase(const QString &serverName, const QString &dbName); void disconnectFromDatabase(); QSqlDatabase getDatabase(){return m_database;}; private: QSqlDatabase m_database; bool openConnection(); void closeConnection(); }; #endif // DATABASECONNECTOR_H
源文件(databaseconnector.cpp)
// databaseconnector.cpp #include "databaseconnector.h" #include <QDebug> #include<QSqlError> DatabaseConnector::DatabaseConnector(QObject *parent) : QObject(parent) { } DatabaseConnector::~DatabaseConnector() { disconnectFromDatabase(); } bool DatabaseConnector::connectToDatabase(const QString &serverName, const QString &dbName) { qDebug()<<serverName; qDebug()<<dbName; m_database = QSqlDatabase::addDatabase("QODBC"); QString dsn = QString("DRIVER={SQL Server};SERVER=%1;DATABASE=%2;Trusted_Connection=Yes;").arg(serverName).arg(dbName); m_database.setDatabaseName(dsn); return openConnection(); } void DatabaseConnector::disconnectFromDatabase() { closeConnection(); } bool DatabaseConnector::openConnection() { if (m_database.isOpen()) return true; if (m_database.open()) { qDebug() << "Connected to database successfully!"; return true; } else { qDebug() << "Error connecting to database:" << m_database.lastError().text(); return false; } } void DatabaseConnector::closeConnection() { if (m_database.isOpen()) { m_database.close(); qDebug() << "Disconnected from database"; } }
数据库连接实例化代码
MainWindow::MainWindow(C_User* user, QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { // 尝试连接数据库 if (m_dbConnector.connectToDatabase(R"(DESKTOP-RTLB2TI\SQLEXPRESS)", "Formula1nou")) { qDebug() << "Connected to database successfully!"; } else { qDebug() << "Failed to connect to database!"; } // 初始化用户界面 ui->setupUi(this); this->user = user; // 额外配置 ui->toolBar->setMovable(false); centerWindow(this); }
报错信息
Error connecting to database: "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified [Microsoft][ODBC Driver Manager] Invalid connection string attribute, IM002;01S00 QODBC: Unable to connect"
解决方法
- 匹配Qt架构与ODBC驱动版本:重装Qt后,确认Qt的位数(32/64位)和系统安装的SQL Server ODBC驱动位数一致。可通过
控制面板→管理工具→ODBC数据源查看已安装驱动版本,若不匹配则安装对应位数的驱动。 - 更新连接字符串驱动名称:旧的
{SQL Server}驱动已被弃用,改用微软推荐的驱动标识,例如{ODBC Driver 17 for SQL Server},修改DSN字符串为:QString dsn = QString("DRIVER={ODBC Driver 17 for SQL Server};SERVER=%1;DATABASE=%2;Trusted_Connection=Yes;").arg(serverName).arg(dbName); - 验证Qt ODBC插件:检查Qt安装目录下
plugins/sqldrivers文件夹是否存在qsqlodbc.dll(Windows),同时在代码中添加qDebug() << QSqlDatabase::drivers();,若输出无QODBC,则需重新安装Qt并勾选SQL Drivers组件中的ODBC选项。 - 手动测试数据库连通性:通过ODBC数据源管理器创建DSN并测试连接,排除数据库服务未启动、权限不足等服务器端问题。
内容的提问来源于stack exchange,提问作者Valentin Axinescu
相关产品推荐
相关产品推荐

