搜索
您的当前位置:首页正文

Win32 SDK编程(教程 总结)10

来源:哗拓教育
    本文由leebls贡献

    doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。

    语言也能干大事》第十六节: 《C 语言也能干大事》第十六节:数据库开发 3 本课程的参考教材:杨中科的《程序员的 SQL 金典》第四章 1、SELECT 基本用法 、 a) 检索所有列、检索指定列 b) 按条件过滤。通配符、Between and select * from T_Employee where FSalary>4000 and FSalary<8000 select * from T_Employee where FSalary BETWEEN 4000 And 8000 c) 数据汇总 select SUM(FSalary),AVG(FSalary),MAX(FSalary),MIN(FSalary) from T_Employee select SUM(FSalary),AVG(FSalary),MAX(FSalary),MIN(FSalary) from T_Employee where FSalary<8000 select COUNT(*) from T_Employee where FSalary>5000。满足条件的数据个数 d) 排序 Ascending:ASC,升序 Descending:Des,降序 select * from T_Employee order by FSalary desc 2、C 语言中访问数据库 、 a) ODBC 简介。ODBC 是微软提供的访问数据库的一种标准接口,通过 ODBC 可以连接 MSSQLServer、MYSQL、DB2、 Oracle、Access 等各种数据库,通过统一的函数进行访问,也就是访问各种数据库都可以使用统一的函数。屏蔽了 连接不同数据库的差异性。 b) 除了 ODBC 之外还有 ADO、ADO.net 等,Java 中有 JDBC 等。都有连接、结果集、游标、事务、参数化 SQL 等概 念,一通百通。 c) 没 安 装 MYODBC(MYSQL 的 ODBC 驱 动 ) 的 首 先 安 装 MYODBC 。 http://down1.rupeng.com/download/software/MYODBC.rar d) sql.h、sqlext.h、sqltypes.h e) 添加连接库“odbc32.lib odbccp32.lib”。如果使用的是 rupeng 的 DialogBased 向导则已经自动添加。如果使用其他 向导或者 C-Free、PellesC 等开发工具,则需要手动添加 f) 看模板代码。不用关心每个函数,用的时候 copy 以后改一改就可以,理解只要流程、主要概念即可,不要深究。 有兴趣的可以研究 CHECKDBSTMTERROR 宏的实现。 g) 访问数据库可能遇到的错误:连接错误、执行错误。 h) 连接数据库、执行 SQL、断开连接。连接字符串。数据库错误处理。 SQLHDBC hdbc:代表一个数据库连接句柄。和 Socket 里边的 Socket 连接类似,要访问数据库,先要连接到数据库。 SQLHDBC:SQL、H 句柄、DB(DataBase) 、C(Connection) SQLHSTMT hstmt:代表一个 SQL 语句。STMT(Statement,语句) SQLRETURN:执行结果。 ODBC 中字符串用 SQLCHAR,SQLCHAR 其实就是 char 的别名。 SQLCHAR ConnStrIn[MAXBUFLEN]和 char ConnStrIn[MAXBUFLEN]一样。 ConnStrIn:连接字符串,你要连接到的数据库的驱动、ip 地址、用户名密码、数据库名(Catalog)等等都在连接字 符串里描述。DRIVER:使用的驱动名;SERVER:ip 地址;UID:用户名(UserID) ;PWD(Password) :密码。DataBase: 数据库名,Catalog。 SQLDriverConnect: 创建到数据库的连接, 使用 ConnStrIn 连接。 result 表示执行结果。 如果失败了 SQL_ERROR==result。 ShowDBConnError(hwnd,hdbc);来显示“连接错误”。 result = SQLPrepare(hstmt,(SQLCHAR*)"insert into T_Person(FAge,FName) values(20,'kider')",SQL_NTS)。创建 SQL 语句的 句柄。 result =SQLExecute(hstmt);:执行 SQL 语句。 SQLFreeStmt(hstmt,SQL_CLOSE);:释放 SQL 语句 SQLDisconnect(hdbc);:断开数据库连接。

    课下参考《程序员的 SQL 金典》进行深一步的学习和预习。 模板代码: 购买此贴后可以得到整个工程的源代码: 1. #include "stdafx.h"

    2. #include <windows.h> 3. #include <windowsx.h> 4. #include  5. #include  6. #include  7. #include "resource.h" 8. #include "MainDlg.h" 9. #define LOGIN_TIMEOUT 30 10. #define MAXBUFLEN 255 11. #define CHECKDBSTMTERROR(hwnd,result,hstmt) if(SQL_ERROR==result){ShowDBStmtError(hwnd,hstmt);return;} 12. 13. BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 14. { 15. switch(uMsg) 16. { 17. HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); 18. HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); 19. HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); 20. } 21. return FALSE; 22. } 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { 

page 1

return TRUE; } void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case IDC_OK: DBTest(hwnd); break; default: break; } } void Main_OnClose(HWND hwnd) { EndDialog(hwnd, 0); } void ShowDBError(HWND hwnd,SQLSMALLINT type,SQLHANDLE sqlHandle) { char pStatus[10], pMsg[101]; SQLSMALLINT SQLmsglen; char error[200] = {0}; SQLINTEGER SQLerr; long erg2 = SQLGetDiagRec(type, sqlHandle,1, (SQLCHAR *)pStatus,&SQLerr,(SQLCHAR *)pMsg,100,&SQLmsglen); wsprintf(error,"%s (%d)\n",pMsg,(int)SQLerr); MessageBox(hwnd,error,TEXT("数据库执行错误 数据库执行错误"),MB_ICONERROR|MB_OK); 数据库执行错误 } void ShowDBConnError(HWND hwnd,SQLHDBC hdbc) { ShowDBError(hwnd,SQL_HANDLE_DBC,hdbc); } void ShowDBStmtError(HWND hwnd,SQLHSTMT hstmt) { ShowDBError(hwnd,SQL_HANDLE_STMT,hstmt); }

    61. 62. void DBTest(HWND hwnd) 63. { 64. SQLHENV henv = NULL; 65. SQLHDBC hdbc = NULL; 66. SQLHSTMT hstmt = NULL; 67. SQLRETURN result; 68. SQLCHAR ConnStrIn[MAXBUFLEN] = "DRIVER={MySQL ODBC Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=test;CharSet=gbk;"; 69. SQLCHAR ConnStrOut[MAXBUFLEN]; 70. //分配环境句柄 分配环境句柄 71. result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); 72. //设置管理环境属性 设置管理环境属性 73. result = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); 74. //分配连接句柄 分配连接句柄 75. result = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); 76. //设置连接属性 设置连接属性 77. result = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (void*)LOGIN_TIMEOUT, 0); 78. //连接数据库 连接数据库 79. result = SQLDriverConnect(hdbc,NULL, 80. ConnStrIn,SQL_NTS, 81. ConnStrOut,MAXBUFLEN, 82. (SQLSMALLINT *)0,SQL_DRIVER_NOPROMPT); 83. if(SQL_ERROR==result)    5.1

    84. { 85. ShowDBConnError(hwnd,hdbc); 86. return; 87. } 88. //初始化语句句柄 初始化语句句柄 89. result = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); 90. //SQL_NTS telling the function the previous parameter is Null-Terminated String, 91. //please alculate the string length for me 92. result = SQLPrepare(hstmt,(SQLCHAR*)"insert into T_Person(FAge,FName) values(20,'kider')",SQL_NTS); 93. CHECKDBSTMTERROR(hwnd,result,hstmt); 94. result =SQLExecute(hstmt); 95. CHECKDBSTMTERROR(hwnd,result,hstmt); 96. SQLFreeStmt(hstmt,SQL_CLOSE); 97. SQLDisconnect(hdbc); 98. SQLFreeHandle(SQL_HANDLE_DBC,hdbc); 99. SQLFreeHandle(SQL_HANDLE_ENV,henv); 100. MessageBox(hwnd,TEXT("执行成功 执行成功"),TEXT("标题 标题"),MB_OK); 执行成功 标题 101. }1

page 2

因篇幅问题不能全部显示,请点此查看更多更全内容

Top