查看完整版本: [-- 连接MSSQL的代码 --]

QTCN开发网 -> Qt代码秀 -> 连接MSSQL的代码 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

XChinux 2012-07-15 10:12

连接MSSQL的代码

  1. #include <QtCore>
    #include <QtSql>

    QString getMSSQLDriver()
    {
        static bool bInit = false;
        static QString strSQLDriverName;
        if (!bInit)
        {
    #ifdef Q_OS_WIN
            QSettings  sts("HKEY_LOCAL_MACHINE\\SOFTWARE\\ODBC\\ODBCINST.INI"
                    "\\ODBC Drivers", QSettings::NativeFormat);
            if (sts.contains("SQL Server Native Client 10.0")
                    && sts.value("SQL Server Native Client 10.0").toString()
                    == "Installed")
            {
                strSQLDriverName = "SQL Server Native Client 10.0";
            }
            else if (sts.contains("SQL Native Client")
                    && sts.value("SQL Native Client").toString() == "Installed")
            {
                strSQLDriverName = "SQL Native Client";
            }
            else if (sts.contains("SQL Server")
                    && sts.value("SQL Server").toString() == "Installed")
            {
                strSQLDriverName = "SQL Server";
            }
    #endif
            bInit = true;
        }
        qDebug() << strSQLDriverName;
        return strSQLDriverName;
    }

    QString  getMSSQLDSN(const QString &strUser, const QString &strPass,
            const QString &strServer, const QString &strDbName)
    {
        return QString(QString("DRIVER={%5};SERVER=%1;"
                        "DATABASE=%2;UID=%3;PWD=%4")
                    .arg(strServer)
                    .arg(strDbName)
                    .arg(strUser)
                    .arg(strPass)
                    .arg(getMSSQLDriver()));
    }

    int main(int argc, char **argv)
    {
        QCoreApplication app(argc, argv);

        if (!QSqlDatabase::isDriverAvailable("QODBC"))
        {
            qDebug() << "driver not available";
            app.quit();
            return 0;
        }

        QSqlDatabase *db = new QSqlDatabase(QSqlDatabase::addDatabase("QODBC"));
        db->setDatabaseName(getMSSQLDSN("sa", "123456",
                        "BJP-X200\\SQLEXPRESS", "master"));
        if (!db->open())
        {
            qDebug() << db->lastError();
        }
        else
        {
            qDebug() << "mssql connect success";
        }
        //......
        
        
        QString strConn = db->connectionName();
        if (db->isOpen())
        {
            db->close();
        }
        delete db;
        QSqlDatabase::removeDatabase(strConn);
        app.quit();
        return 0;
    }


注:由于Q_WS_WIN在Qt5中被废弃了,所以使用Q_OS_WIN代替.

XChinux 2012-07-15 10:18
从项目代码中摘出来的,不完善,迟些修改完善。

lyjbbq 2012-08-17 09:11

zxzxdtc 2012-12-25 20:17
你好,版主,你的代码我看了,我也试过你这样,但是还是连接不成功,你的第61行不就是服务器名和数据名么,我这也是这么写的,就是显示SQL server不存在或访问被拒绝,不理解啊。。。

XChinux 2012-12-25 22:02
那个你所说的服务器名,要写成server\instance样式 .
你安装的MSSQL2008,是 express版么?确定下它的实例名是什么(express版的,默认是SQLEXPRESS)

zaq2010 2013-01-05 15:42
代码还算简单  就是不明白 为什么 在第39末尾 40开头 写引号

XChinux 2013-01-05 20:54
引用第5楼zaq2010于2013-01-05 15:42发表的  :
代码还算简单  就是不明白 为什么 在第39末尾 40开头 写引号

字符串换行,不加双引号,就得加续行符。

XChinux 2013-03-02 09:51
由于Qt的tds 插件从4.7开始也被废弃了,所以Linux下可以用unixODBC+FreeTDS来连接MSSQL。

hehui 2013-03-18 10:15
收下 getMSSQLDriver()
以前一直没用过"SQL Server Native Client 10.0"
请教楼主它跟"SQL Server"有什么区别?


chenjau 2013-04-02 01:25
多谢老大分享。

XChinux 2013-04-02 08:04
引用第8楼hehui于2013-03-18 10:15发表的  :
收下 getMSSQLDriver()
以前一直没用过"SQL Server Native Client 10.0"
请教楼主它跟"SQL Server"有什么区别?


就是微软发布的不同版本的MSSQL驱动。

马前卒 2013-05-09 13:22
多谢楼主的代码作参考

我现在是直接在Windows 的 ODBC 管理中配置好别名 然后用 QODBC连接


原因是 自已编译成功了 QMYSQL 的 4个驱动文件 ,但一直不能用


楼主为什么不直接用QMYSQL 驱动呢?

neil-wen 2013-08-14 10:01
多谢分享

XChinux 2013-10-11 11:32
引用第11楼马前卒于2013-05-09 13:22发表的  :
多谢楼主的代码作参考
我现在是直接在Windows 的 ODBC 管理中配置好别名 然后用 QODBC连接
.......

这里是MSSQL,不是MySQL


查看完整版本: [-- 连接MSSQL的代码 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled