C++用odbc连接数据库

怎么让用户输入查询条件,这是我的查询过程

SQLHSTMT  hStmt= NULL;
    ret = SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);

    //SQL查询语句 
    SQLTCHAR sql[] = _T("SELECT  * FROM  Teacher ");

    //执行SQL语句
    ret = SQLExecDirect(hStmt, sql, SQL_NTS); //SQL_NTS自动计算sql语句的长度
    if ((ret == SQL_SUCCESS) || (ret == SQL_SUCCESS_WITH_INFO))
    {
        //查询之后,所有数据放到了一块缓冲区,我们需要把他分离出来
        TCHAR id[6] = { 0 };
        TCHAR name[32] = { 0 };
        TCHAR sex[6] = {0};
        int age =  0 ;
        TCHAR xibu[10] = { 0 };
        //绑定字段
        SQLLEN len = SQL_NTS;
        SQLBindCol(hStmt, 1, SQL_C_WCHAR, id, sizeof(id), &len);
        SQLBindCol(hStmt, 2, /*SQL_C_CHAR*/SQL_C_WCHAR, name, sizeof(name), &len);
        SQLBindCol(hStmt, 3, SQL_C_WCHAR, sex, sizeof(sex),&len );
        SQLBindCol(hStmt, 4, SQL_C_LONG, &age, sizeof(age), 0);
        SQLBindCol(hStmt, 5, SQL_C_WCHAR, xibu, sizeof(xibu), &len);
        //逐行遍历,获取数据
        ret = SQLFetch(hStmt);
        while (ret != SQL_NO_DATA)
        {
            wcout << id << "\t" << name << "\t" <<sex<<"\t" <<age <<"\t"<<xibu<< endl;

            //每次清除一下上行的旧数据,保证下次获取的数据干净
            ZeroMemory(id, sizeof(id));
            ZeroMemory(name, sizeof(name));
            ZeroMemory(sex, sizeof(sex));
            age = 0;
            ZeroMemory(xibu, sizeof(xibu));
            //获取下一行缓冲区的数据填充到id,name,age
            ret = SQLFetch(hStmt);
        }


        SQLLEN n = 0;
        ret = SQLRowCount(hStmt, &n);//查询被影响的行数(适用于SELECT ,INSERT,UPDATE,DELETE操作)
        if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO)
        {
            _tprintf(_T("查询%d行数据成功!\n"), n);
        }

    }
    else if (ret == SQL_ERROR)
    {
        SQLTCHAR   state[128] = { 0 };
        SQLTCHAR   msg[128] = { 0 };
        //获取错误信息,注意填写语句句柄
        ret = SQLError(hEnv, hDbc, hStmt, state, NULL, msg, sizeof(msg), NULL);
        wcout << state << "   " << msg << endl;
    }


    //释放语句句柄
    if (hStmt)
    {
        ret = SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
    }

 

条件是自己定义的,例如:SELECT * FROM Teacher WHERE id = 0;

这个id等于什么就是用户输入的,这里只是需要将字符串组合一下就行。

 

举一个相似例子,自己根据自己的需求进行改代码就行:

int id = 0;
char sql[256];

cout << "请输入条件id:";
cin >> id;

// C语言字符串组合
snprintf(sql, 256, "SELECT * FROM Teacher WHERE id = %d;", id);

组合出来的sql就是你需要执行的SQL语句了。

 

点个采纳吧!

直接用字符串拼接 SQL文就可以达到用户输入的时候 根据查询条件进行匹配

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632