1、ODBC Driver 的版本要对应上。
if (!strDbDirPath.isEmpty())
m_strDbDirPath = strDbDirPath;
m_strDatabaseName = strDatabaseName;
if (m_database.isOpen() || m_bConnected)
{
qDebug() << QString("QODBC:已经连接成功!") << "\n";
return m_database;
}
else
{
m_database = QSqlDatabase::addDatabase("QODBC");
// 这里要注意ODBC Driver 17 版本要不然可能整型和读点数读取不到
QString strConnect = QString("DRIVER={ODBC Driver 17 for SQL Server};"
"SERVER=%1;" //服务器名称
"DATABASE=%2;"//数据库名
"UID=%3;" //登录名
"PWD=%4;" //密码
)
.arg(strHostName)
.arg(strDatabaseName)
.arg(strUserName)
.arg(strPassword);
qDebug() << QString("QODBC:") << strConnect << "\n";
m_database.setDatabaseName(strConnect);
if (!m_database.open())
{
qDebug() << QString("QODBC:连接失败!") << "\n";
QString strText = m_database.lastError().text();
qDebug() << m_database.lastError().text();
}
else
{
qDebug() << QString("QODBC:连接成功!") << "\n";
m_bConnected = true;
}
}
1、另外如果使用ODBC的连接方式,有可能是驱动问题,重新设置连接试试
2、另外发现这种直接连接的,执行SQL语句的时候经常异常奔溃,所以还是得使用下面的这种方式,如果遇到浮点或者整型读取不到的话,就换ODBC驱动方式。
#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>
// ...
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); // 使用QODBC驱动连接SQL Server
db.setHostName("myServer"); // 服务器名或IP地址
db.setDatabaseName("myDatabase"); // 数据库名
db.setUserName("myUsername"); // 用户名
db.setPassword("myPassword"); // 密码
bool ok = db.open();
if(ok) {
qDebug() << "数据库连接成功!";
// 执行数据库操作...
} else {
qDebug() << "数据库连接失败:" << db.lastError().text();
}
// ...