liangzhuer 2021-05-16 11:50 采纳率: 100%
浏览 46
已采纳

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);
    }
  • 写回答

3条回答 默认 最新

  • CSDN专家-cpp_learner 2021-05-16 12:11
    关注

    条件是自己定义的,例如: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语句了。

     

    点个采纳吧!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)