c++操作sql server --查

前置知识

sql实际操作处理函数--do_search的编写

        几乎所有的增删改查操作都可以调用这个函数所抽象出的部分进行实现,因此在本class中是非常重要的。

参数表:
        const string &control:数据库操纵语句
        vector<vector<string>> &result:结果存储在该二维字符串数组
        vector<int> &len:查询所有列对应的列长信息
        int & effect_num:结果中的有效行数
        int &col_num:执行查询的列的数量
执行过程:
        对传参数据所代表的查询进行对应的数据库操纵并将结果遍历存储下来。
参数表:
        返回 1:查询执行成功且结果已经保存至指定位置(result 传参)
        返回 0:查询过程出错

/** 外界查询对象的实际查询过程(非存在性查询的实现)*/
bool man_sql::do_search(const string&control,vector<vector<string>>&result,vector<int>&len,int &effect_num,int &col_num)
{
     if(init_SED(control)==0)
    {
        cout<<"数据库查询时出错!"<<endl;
        return 0;
    }
    vector<SQLCHAR *> column;
    SQLLEN str_len[N];
    //执行查询并逐列扫描存储起来
    for(int i=0; i<col_num; i++)
    {
        column.push_back(new SQLCHAR[len[i]]+1);
        ret=SQLBindCol(stmt, i+1, SQL_C_CHAR,column[i], len[i]+1, &str_len[i]);
    }
    effect_num=0;
    while( (ret=SQLFetch(stmt))!=SQL_NO_DATA_FOUND )
    {
        if(ret==SQL_ERROR)
        {
            cout<<"数据库使用出错"<<endl;
            return 0;
        }
        else
        {
            effect_num++;
            result.push_back(* new vector<string>);
            for(int i=0; i<col_num; i++)
                result[result.size()-1].push_back((char*)column[i]);
        }
    }
    return 1;
}

查询函数

参数表:
        const string &tablename:执行查询操作的表名
        vector>& result:结果存储在该二维字符串数组(相当于三维字 符数组中返回到调用位置)
        int &effect_num:结果中的有效行数
        int &col_num:结果中的有效列数
执行功能:
        查询某表的所有列的数据并将结果存储在数组中。
返回值:
        返回 1:查询执行成功且结果已经保存至指定位置(result 传参)
        返回 0:查询过程出错
         (失败原因分析:建议检查传参 tablename,result 的正确性)

bool man_sql::sql_select(const string &tablename, vector<vector<string>>& result , 
int &effect_num,int &col_num) 
{ 
 bool success;
 /*执行对应表的所有列对应列宽的查询*/ 
 vector <int> len;
 if(getlength(tablename, len, col_num)==0) return 0;
/*执行本函数的实际目标查询*/ 
 string control="select * from "+tablename;
 //调用 do_search 进行实际的查询任务,并对查询的成功与否进行判断 
 success=do_search(control, result, len, effect_num, col_num);
 if(success==0) return 0;
 else return 1;
} 

        对这里的代码稍作改造就可以实现更加复杂的查询过程。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值