数据库开发一

ODBC API连接数据库

这是自己第一次碰数据库。
这里以sql server2000为例,新建一张student表 有name age sex no属性,插入若干记录。
在控制面板 管理工具 选中数据源(ODBC)。点添加 选择相应的数据库 完成。命名数据源名称(重要,连接时要用)并记住,选择连接的服务器,一般为local,收工。

接下来是代码,先创建一个控制台程序
#include "stdafx.h"
#include "windows.h"
#include "sql.h"
#include "sqlext.h"

int main(int argc, char* argv[])
{
    RETCODE retcode;//return value   
    int nRecNo = 0;
    char szName[10];
    char szSex[4];
    SQLINTEGER szAge,szNo,iLen;//类型要和数据库中的表格数据类型一致

    SQLHENV henv = SQL_NULL_HENV; //SQL环境句柄
    SQLHENV hdbc = SQL_NULL_HDBC; //SQL连接句柄   
    SQLHENV hstmt = SQL_NULL_HSTMT; //SQL语句句柄
    UCHAR szDSN[SQL_MAX_DSN_LENGTH] = "TCCDB";//DSN连接,
    SDWORD sdLen;//返回字符串长度

    char szSQL[]= "select * from student";
   
    //分配ODBC环境句柄,并设置成ODBC3.0应用程序
    retcode = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
    //分配ODBC连接句柄,并通过DSN建立连接
    retcode = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);

    retcode = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
    retcode = SQLConnect(hdbc,szDSN,strlen((LPCTSTR)szDSN),NULL,0,NULL,0);

    if ((retcode!=SQL_SUCCESS)&&(retcode!=SQL_SUCCESS_WITH_INFO))
    {
        printf("没有成功连接到数据库/n");
    }
    else
    {
        printf("已经连接到数据库/n");

        retcode = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
        if (SQL_SUCCESS == retcode)
        {
            retcode = SQLExecDirect(hstmt,(unsigned char*)szSQL,SQL_NTS);//执行查询SQL语句
            if (SQL_SUCCESS == retcode)
            {
                for(retcode=SQLFetch(hstmt);retcode==SQL_SUCCESS;retcode=SQLFetch(hstmt))//获取当前纪录,并将CURSOR移到下一行
                {//循环获取当前行的纪录,直到最后一行纪录完毕
                    nRecNo++;
                   
                    SQLGetData(hstmt,1,SQL_C_CHAR,szName,10,&sdLen);
                    SQLGetData(hstmt,2,SQL_C_LONG,&szAge,0,&iLen);
                    SQLGetData(hstmt,3,SQL_C_CHAR,szSex,5,&sdLen);
                    SQLGetData(hstmt,4,SQL_C_LONG,&szNo,0,&iLen);
                    printf("姓名:%s 年龄:%d  性别:%s 学号:%d /n",szName,szAge,szSex,szNo);
                }
            }
            SQLFreeHandle(SQL_HANDLE_STMT,hstmt);
        }   
    }
    SQLDisconnect(hdbc);
    SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
    SQLFreeHandle(SQL_HANDLE_ENV,henv);

    getchar();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值