加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Qt远程连接SQlServer数据库

发布时间:2020-12-12 14:32:31 所属栏目:MsSql教程 来源:网络整理
导读:一:代码。 /**连接sql?server数据库 ? ??*数据库名:abc ? ??*表名:SQL_2000 ? ??*用户名:sa ? ??*密码:123 ? ??*端口号:(默认)1433 ? */ ?? void ?MainDialog::connectSql(QString?sIp,? int ?iPort,??QString?sDbNm,?QString?sUserNm,?QString?sPwd)?

一:代码。

  1. /**连接sql?server数据库?
  2. ??*数据库名:abc?
  3. ??*表名:SQL_2000?
  4. ??*用户名:sa?
  5. ??*密码:123?
  6. ??*端口号:(默认)1433?
  7. */??
  8. void?MainDialog::connectSql(QString?sIp,?int?iPort,??QString?sDbNm,?QString?sUserNm,?QString?sPwd)??
  9. {??
  10. ????db?=?QSqlDatabase::addDatabase("QODBC");??
  11. ????QString?dsn?=?QString("Driver={sql?server};SERVER=%1;PORT=%2;DATABASE=%3;UID=%4;PWD=%5;")??
  12. ??????????????????.arg(sIp)??
  13. ??????????????????.arg(iPort)??
  14. ??????????????????.arg(sDbNm)??
  15. ??????????????????.arg(sUserNm)??
  16. ??????????????????.arg(sPwd);??
  17. ????db.setDatabaseName(dsn);??
  18. ??
  19. ??
  20. ????/*连接sql?2000*/??
  21. ????bool?r?=?db.open();??
  22. ????if?(r)??
  23. ????{??
  24. ????????qDebug()?<<?"SQL?Server?2000?Connect?OK!";??
  25. ????????/*?计算当前表中id*/??
  26. ????????QSqlQuery?query1?=?QSqlQuery(db);??
  27. ????????query1.clear();??
  28. ????????query1.prepare("select?top?1?ID?from?SQL_2000?order?by?ID?desc");??
  29. ????????bool?a?=?query1.exec();??
  30. ????????int?id;??
  31. ????????if?(a)??
  32. ????????{??
  33. ????????????while(query1.next())??
  34. ????????????{??
  35. ????????????????id?=?query1.value(0).toInt();??
  36. ????????????}??
  37. ????????}??
  38. /*插入数据*/??
  39. ????????QSqlQuery?query2?=?QSqlQuery(db);??
  40. ????????QString?sq1?=?QObject::tr("insert?into?SQL_2000(Id,Ip,Port,UserName,Password,DbType,DbName)"??
  41. ??????????????????????????????????"values?(?,??,??)");??
  42. bool?b?=?query2.prepare(sq1);??
  43. ????????if(b)??
  44. ????????{??
  45. ????????????qDebug()?<<?"insert?data?success!";??
  46. ????????query2.bindValue(0,?id+1);??
  47. ????????query2.bindValue(1,?sIp);??
  48. ????????query2.bindValue(2,?iPort);??
  49. ????????query2.bindValue(3,?sUserNm);??
  50. ????????query2.bindValue(4,?sPwd);??
  51. ????????query2.bindValue(5,?sDbType);??
  52. ????????query2.bindValue(6,?sDbNm);??
  53. ????????/*查询数据*/??
  54. ????????QSqlQuery?query3?=?QSqlQuery(db);??
  55. ????????query3.prepare("select?*?from?SQL_2000?where?Id=1");??
  56. bool?c?=?query3.exec();??
  57. if?(c)??
  58. ????????????qDebug()?<<?"select?data?success!";??
  59. while(query3.next())??
  60. ????????????????qDebug()?<<?query3.value(0);??
  61. ????????????????qDebug()?<<?query3.value(1);??
  62. ????????????????qDebug()?<<?query3.value(2).toInt();??
  63. else??
  64. ????????????qDebug()?<<?query3.lastError().text().data();??
  65. /*删除数据*/??
  66. ????????QSqlQuery?query4?=?QSqlQuery(db);??
  67. ????????query4.prepare("delete?from?SQL_2000?where?Id=1");??
  68. bool?d?=?query4.exec();??
  69. if?(d)??
  70. ????????????qDebug()?<<?"delete?data?success!";??
  71. ????????}??
  72. else??
  73. ????????????qDebug()?<<?query3.lastError().text().data();??
  74. ????}??
  75. ???? ????{??
  76. ????????QMessageBox::information(this,?tr("提示"),?tr("Sql?Server数据库连接失败!"),?tr("确定"));??
  77. ????????qDebug()?<<"error_SqlServer:n"?<<?db.lastError().text();??
  78. ????}??
  79. ????db.close();??
  80. } ?

二:安装。

? ? 参考http://www.voidcn.com/article/p-uqpsvgbl-eh.html(安装图解)


三:连接过程遇到的问题。

问题:"[Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server 不存在或访问被拒绝 [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). [Microsoft][ODBC SQL Server Driver]无效的连接字符串属性 QODBC3: Unable to connect"

? ? ? ?通过http://topic.csdn.net/u/20100429/10/586ed537-0a66-48ac-97d6-e662e5199339.html对比,我发现问题:

? ? ? ?服务器没有在1433端口侦听。

? ? ? (测试方法:在dos下输入netstat -a -n或者netstat -an;结果:找不到tcp 127.0.0.1 1433 listening的项)

解决方法:

? ? 安装补丁(我的版本对应sp4)

? ? ? ?打补丁的过程中出现问题:不能打开要写入的文件C:WINDOWSsystem32ntwdblib.dll。

? ? ? ?重启还是不行,我就把sp4安装包中的ntwdblib.dll直接拷贝到C:WINDOWSsystem32中。

? ? ? ?再试telnet 127.0.0.1 1433,居然连接上了。

? ?网卡设置:端口没被侦听,也可能是网卡的问题。

? ? ? ?本地连接--->属性--->Internet协议(TCP/IP)--->属性--->高级--->选项--->属性--->全部允许TCP端口。

? ? ? ?

[cpp]? view plain copy print ?
    /**连接sql?server数据库?
  1. ??*数据库名:abc?
  2. ??*表名:SQL_2000?
  3. ??*用户名:sa?
  4. ??*密码:123?
  5. ??*端口号:(默认)1433?
  6. */??
  7. {??
  8. ????db?=?QSqlDatabase::addDatabase("QODBC");??
  9. ????QString?dsn?=?QString("Driver={sql?server};SERVER=%1;PORT=%2;DATABASE=%3;UID=%4;PWD=%5;")??
  10. ??????????????????.arg(sIp)??
  11. ??????????????????.arg(iPort)??
  12. ??????????????????.arg(sDbNm)??
  13. ??????????????????.arg(sUserNm)??
  14. ??????????????????.arg(sPwd);??
  15. ????db.setDatabaseName(dsn);??
  16. ??
  17. ??
  18. ????/*连接sql?2000*/??
  19. ????bool?r?=?db.open();??
  20. ????if?(r)??
  21. ????{??
  22. ????????qDebug()?<<?"SQL?Server?2000?Connect?OK!";??
  23. ????????/*?计算当前表中id*/??
  24. ????????QSqlQuery?query1?=?QSqlQuery(db);??
  25. ????????query1.clear();??
  26. ????????query1.prepare("select?top?1?ID?from?SQL_2000?order?by?ID?desc");??
  27. ????????bool?a?=?query1.exec();??
  28. ????????int?id;??
  29. ????????if?(a)??
  30. ????????{??
  31. ????????????while(query1.next())??
  32. ????????????{??
  33. ????????????????id?=?query1.value(0).toInt();??
  34. ????????????}??
  35. ????????}??
  36. /*插入数据*/??
  37. ????????QSqlQuery?query2?=?QSqlQuery(db);??
  38. ????????QString?sq1?=?QObject::tr("insert?into?SQL_2000(Id,DbName)"??
  39. ??????????????????????????????????"values?(?,??)");??
  40. bool?b?=?query2.prepare(sq1);??
  41. ????????if(b)??
  42. ????????{??
  43. ????????????qDebug()?<<?"insert?data?success!";??
  44. ????????query2.bindValue(0,?id+1);??
  45. ????????query2.bindValue(1,?sIp);??
  46. ????????query2.bindValue(2,?iPort);??
  47. ????????query2.bindValue(3,?sUserNm);??
  48. ????????query2.bindValue(4,?sPwd);??
  49. ????????query2.bindValue(5,?sDbType);??
  50. ????????query2.bindValue(6,?sDbNm);??
  51. ????????/*查询数据*/??
  52. ????????QSqlQuery?query3?=?QSqlQuery(db);??
  53. ????????query3.prepare("select?*?from?SQL_2000?where?Id=1");??
  54. bool?c?=?query3.exec();??
  55. if?(c)??
  56. ????????????qDebug()?<<?"select?data?success!";??
  57. while(query3.next())??
  58. ????????????????qDebug()?<<?query3.value(0);??
  59. ????????????????qDebug()?<<?query3.value(1);??
  60. ????????????????qDebug()?<<?query3.value(2).toInt();??
  61. else??
  62. ????????????qDebug()?<<?query3.lastError().text().data();??
  63. /*删除数据*/??
  64. ????????QSqlQuery?query4?=?QSqlQuery(db);??
  65. ????????query4.prepare("delete?from?SQL_2000?where?Id=1");??
  66. bool?d?=?query4.exec();??
  67. if?(d)??
  68. ????????????qDebug()?<<?"delete?data?success!";??
  69. ????????}??
  70. else??
  71. ????????????qDebug()?<<?query3.lastError().text().data();??
  72. ????}??
  73. ???? ????{??
  74. ????????QMessageBox::information("确定"));??
  75. ????????qDebug()?<<"error_SqlServer:n"?<<?db.lastError().text();??
  76. ????}??
  77. ????db.close();??
  78. } ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读