Connecting to a Datasource (UNIX) (ZT)
luyued 发布于 2011-02-03 21:22 浏览 N 次First thing you will need is a variable of type SQLHENV. This is a handle (pointer) to an internal ODBC structure which holds all informationen about the ODBC environment. Without a handle of that kind you won't be able do to very much. To get this handle you call SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &V_OD_Env). V_OD_Erg is a variable of type SQLHENV which holds the allocated environment handle.
If you have allocated the handle you need to define which version of ODBC to use. Therefore you should call SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0). The constant SQL_ATTR_ODBC_VERSION defines that the needed version of ODBC will be defined and SQL_OV_ODBC3 says that the program will need ODBC 3.0.
Next thing to do is to create a handle for the database connection which is of the type SQLHDBC. Once again you call SQLAllocHandle this time with SQL_HANDLE_DBC and the variable to the environment returned by the first call to SQLAllocHandle.
Then you may choose to modify the connection attributes, mainly the timeout for any given action on the connection. You do this by calling SQLSetConnectAttr with the connection handle, attribute and value pointer and the string length (if available).
Finally we are able to connect to the database via SQLConnect, which needs the name of the data source, the username and password as parameters. For each parameter you need to specify how long the string is or just gib SQL_NTS which says that it is a string which length has to be determined by SQLConnect
That's it, we are connected to the database. Please note, that all functions mentioned on this page return either SQL_SUCCESS, SQL_SUCCESS_WITH_INFO if all went smoothly or SQL_ERROR or SQL_INVALID_HANDLE in case of an error. We will have a look on how to get diagnostic messages a little later.
So let's have a look at the code:
/* odbc.c
testing unixODBC
*/
#include
#include
#include
#include
#include
SQLHENV V_OD_Env; // Handle ODBC environment
long V_OD_erg; // result of functions
SQLHDBC V_OD_hdbc; // Handle connection
char V_OD_stat[10]; // Status SQL
SQLINTEGER V_OD_err,V_OD_rowanz,V_OD_id;
SQLSMALLINT V_OD_mlen;
char V_OD_msg[200],V_OD_buffer[200];
int main(int argc,char *argv[])
{
// 1. allocate Environment handle and register version
V_OD_erg=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env);
if ((V_OD_erg != SQL_SUCCESS) &&(V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error AllocHandle\n");
exit(0);
}
V_OD_erg=SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION,
(void*)SQL_OV_ODBC3, 0);
if ((V_OD_erg != SQL_SUCCESS) &&(V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error SetEnv\n");
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
// 2. allocate connection handle, set timeout
V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc);
if ((V_OD_erg != SQL_SUCCESS) &&(V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error AllocHDB %d\n",V_OD_erg);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
SQLSetConnectAttr(V_OD_hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER *)5, 0);
// 3. Connect to the datasource "web"
V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "web", SQL_NTS,
(SQLCHAR*) "christa", SQL_NTS,
(SQLCHAR*) "", SQL_NTS);
if ((V_OD_erg != SQL_SUCCESS) &&(V_OD_erg != SQL_SUCCESS_WITH_INFO))
{
printf("Error SQLConnect %d\n",V_OD_erg);
SQLGetDiagRec(SQL_HANDLE_DBC, V_OD_hdbc,1,
V_OD_stat, &V_OD_err,V_OD_msg,100,&V_OD_mlen);
printf("%s (%d)\n",V_OD_msg,V_OD_err);
SQLFreeHandle(SQL_HANDLE_DBC, V_OD_hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
exit(0);
}
printf("Connected !\n");
/* continued on next page */
}
- 06-02· 【转】 给Ubuntu安装netboo
- 06-02· Netbook
- 05-31· 你搜“联宝戏” 揭示你未
- 05-31· 联宝戏一切成功都是那么
- 05-31· 联宝(LINPO)
- 05-31· 台湾联宝CY25 ¥1400
- 05-31· 透视!笔记本奸商的无间道
- 05-31· 沈阳惠普笔记本维修千万
- 05-31· 重庆联宝活性炭恭祝各位
- 05-31· [转载]第十步:移联宝移动
- 05-28· 高端便携商务本 富士通
- 05-27· 富士通推首台器MeeGo新本
- 05-27· 富士通云计算方案三级跳
- 05-26· 惠普 Compaq 6530B(VA078PA)
- 05-26· of Alienware M14xAkku HP Compaq
- 05-26· ASUS HP COMPAQ DELL 笔记...
- 05-26· 惠普Compaq Presario CQ40 313A
- 05-25· 2011年03月25日
- 05-25· 如何安装在您的康柏Evo
- 05-25· 康柏斯校园购物网康柏斯