使用ODBC API訪問數據庫簡單流程,供參考使用:
ODBC API
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
SQLHENV m_hEnviroment;
//數據庫環境句柄,屬於老大級別的 SQLHDBC m_hDatabaseConnection; //數據庫連接句柄,老大以后就是他了,有了他數據庫就連接上了 SQLHSTMT m_hStatement; //執行語句句柄,最終執行SQL於句的句柄 // 使用ODBC API建立數據庫連接分為3部分: // 申請環境句柄, // 使用環境句柄申請連接句柄, // 使用連接句柄連接數據庫。 /* 申請環境變量 */ // 申請各種句柄都靠這個函數, // 參數1是要申請句柄的類型, // 參數2為申請該句柄依靠的句柄(老大沒依靠,所以是NULL),申請結果在參數3中保存 SQLRETURN sqlReturn = SQLAllocHandle(SQL_HANDLE_ENV, NULL , &m_hEnviroment); // 返回值代表着執行的意義,如下面判斷,SUCCESS_WITH_INFO相當於是警告,雖然成功了,但是可能有問題 if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO) { return - 1 ; } // 設置ODBC環境屬性 SQLSetEnvAttr(m_hEnviroment, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); /* 申請連接句柄 */ sqlReturn = SQLAllocHandle(SQL_HANDLE_DBC, m_hEnviroment, &m_hDatabaseConnection); if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO) { return - 1 ; } // 准備連接工作 SQLWCHAR* sqlwcaDsnName = _T( "mysqlDB" ); //數據源名稱 SQLWCHAR* sqlwcaUserName = _T( "root" ); //用戶名稱 SQLWCHAR* sqlwcaPassWord = _T( "kingview" ); //密碼 // 連接數據源 sqlReturn = SQLConnect( m_hDatabaseConnection ,sqlwcaDsnName, SQL_NTS ,sqlwcaUserName, SQL_NTS ,sqlwcaPassWord, SQL_NTS); if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO) { return - 1 ; } /* 申請SQL語句句柄 */ SQLRETURN sqlReturn = SQLAllocHandle(SQL_HANDLE_STMT, m_hDatabaseConnection, &m_hStatement); if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO) { return 0 ; } /* 構造SQL語句 */ CString cstrSql; cstrSql.Format(_T( "SELECT * FROM mytable " )); /* 執行SQL語句 */ sqlReturn = SQLExecDirect(m_hStatement, cstrSql.GetBuffer(), SQL_NTS); if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO) { return 0 ; } /* 獲得返回結果的行數 */ SQLINTEGER sqlnIdCount = 0 ; sqlReturn = SQLRowCount(m_hStatement,&sqlnIdCount); /* 開始讀取結果 */ // 讀取第一行時要調用,以后依次調用就可以下移行數,直到不返回SQL_SUCCESS sqlReturn = SQLFetch(m_hStatement); if (sqlReturn != SQL_SUCCESS && sqlReturn != SQL_SUCCESS_WITH_INFO) { return 0 ; } SQLINTEGER sqlnID; SQLINTEGER sqlnIDLength = 0 ; /* 獲得數據 */ SQLGetData(m_hStatement, 1 , SQL_C_ULONG, &sqlnID, 0 , &sqlnIDLength); // 參數1為執行語句的句柄, // 參數2為所要得到的數據位於的列數(SQL語句中), // 參數3為數據類型,這個比較多,需要看一下MSDN // 參數4為保存的位置(地址), // 參數5為參數4可用的位置,既然參數3已設定為長整型,所以這里可使用0 // 參數6為實際返回的長度 // 釋放句柄,斷開連接 SQLFreeHandle(SQL_HANDLE_STMT, m_hStatement); SQLFreeHandle(SQL_HANDLE_DBC, m_hDatabaseConnection); SQLFreeHandle(SQL_HANDLE_ENV, m_hEnviroment); |