• 9675阅读
  • 13回复

连接MSSQL的代码 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2012-07-15
关键词: MSSQL
  1. #include <QtCore>
  2. #include <QtSql>
  3. QString getMSSQLDriver()
  4. {
  5.     static bool bInit = false;
  6.     static QString strSQLDriverName;
  7.     if (!bInit)
  8.     {
  9. #ifdef Q_OS_WIN
  10.         QSettings  sts("HKEY_LOCAL_MACHINE\\SOFTWARE\\ODBC\\ODBCINST.INI"
  11.                 "\\ODBC Drivers", QSettings::NativeFormat);
  12.         if (sts.contains("SQL Server Native Client 10.0")
  13.                 && sts.value("SQL Server Native Client 10.0").toString()
  14.                 == "Installed")
  15.         {
  16.             strSQLDriverName = "SQL Server Native Client 10.0";
  17.         }
  18.         else if (sts.contains("SQL Native Client")
  19.                 && sts.value("SQL Native Client").toString() == "Installed")
  20.         {
  21.             strSQLDriverName = "SQL Native Client";
  22.         }
  23.         else if (sts.contains("SQL Server")
  24.                 && sts.value("SQL Server").toString() == "Installed")
  25.         {
  26.             strSQLDriverName = "SQL Server";
  27.         }
  28. #endif
  29.         bInit = true;
  30.     }
  31.     qDebug() << strSQLDriverName;
  32.     return strSQLDriverName;
  33. }
  34. QString  getMSSQLDSN(const QString &strUser, const QString &strPass,
  35.         const QString &strServer, const QString &strDbName)
  36. {
  37.     return QString(QString("DRIVER={%5};SERVER=%1;"
  38.                     "DATABASE=%2;UID=%3;PWD=%4")
  39.                 .arg(strServer)
  40.                 .arg(strDbName)
  41.                 .arg(strUser)
  42.                 .arg(strPass)
  43.                 .arg(getMSSQLDriver()));
  44. }
  45. int main(int argc, char **argv)
  46. {
  47.     QCoreApplication app(argc, argv);
  48.     if (!QSqlDatabase::isDriverAvailable("QODBC"))
  49.     {
  50.         qDebug() << "driver not available";
  51.         app.quit();
  52.         return 0;
  53.     }
  54.     QSqlDatabase *db = new QSqlDatabase(QSqlDatabase::addDatabase("QODBC"));
  55.     db->setDatabaseName(getMSSQLDSN("sa", "123456",
  56.                     "BJP-X200\\SQLEXPRESS", "master"));
  57.     if (!db->open())
  58.     {
  59.         qDebug() << db->lastError();
  60.     }
  61.     else
  62.     {
  63.         qDebug() << "mssql connect success";
  64.     }
  65.     //......
  66.     
  67.     
  68.     QString strConn = db->connectionName();
  69.     if (db->isOpen())
  70.     {
  71.         db->close();
  72.     }
  73.     delete db;
  74.     QSqlDatabase::removeDatabase(strConn);
  75.     app.quit();
  76.     return 0;
  77. }


注:由于Q_WS_WIN在Qt5中被废弃了,所以使用Q_OS_WIN代替.
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 1楼 发表于: 2012-07-15
从项目代码中摘出来的,不完善,迟些修改完善。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线lyjbbq

只看该作者 2楼 发表于: 2012-08-17
离线zxzxdtc

只看该作者 3楼 发表于: 2012-12-25
回 1楼(XChinux) 的帖子
你好,版主,你的代码我看了,我也试过你这样,但是还是连接不成功,你的第61行不就是服务器名和数据名么,我这也是这么写的,就是显示SQL server不存在或访问被拒绝,不理解啊。。。
离线XChinux

只看该作者 4楼 发表于: 2012-12-25
那个你所说的服务器名,要写成server\instance样式 .
你安装的MSSQL2008,是 express版么?确定下它的实例名是什么(express版的,默认是SQLEXPRESS)
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线zaq2010

只看该作者 5楼 发表于: 2013-01-05
代码还算简单  就是不明白 为什么 在第39末尾 40开头 写引号
离线XChinux

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

字符串换行,不加双引号,就得加续行符。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线XChinux

只看该作者 7楼 发表于: 2013-03-02
由于Qt的tds 插件从4.7开始也被废弃了,所以Linux下可以用unixODBC+FreeTDS来连接MSSQL。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线hehui

只看该作者 8楼 发表于: 2013-03-18
收下 getMSSQLDriver()
以前一直没用过"SQL Server Native Client 10.0"
请教楼主它跟"SQL Server"有什么区别?

离线chenjau

只看该作者 9楼 发表于: 2013-04-02
多谢老大分享。
离线XChinux

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


就是微软发布的不同版本的MSSQL驱动。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线马前卒

只看该作者 11楼 发表于: 2013-05-09
多谢楼主的代码作参考

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


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


楼主为什么不直接用QMYSQL 驱动呢?
离线neil-wen

只看该作者 12楼 发表于: 2013-08-14
多谢分享
离线XChinux

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

这里是MSSQL,不是MySQL
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个