C++中使用ODBC连接SQL Server数据库

本文探讨了ODBC和ADO在数据库操作中的应用,指出ADO在易用性和效率上的优势,并提供了ODBC连接及操作的具体示例代码,包括SQL语句执行和数据获取过程。
该文章已生成可运行项目,

整体总结

用odbc过时了,还是使用ado吧,易用,高效率,不用配置odbc数据源,易维护,实际项目已从odbc中改用了ado,请看我的这篇文章,有详细的封装实现:https://blog.youkuaiyun.com/lishenluo/article/details/108239084

坚持用odbc?那么继续这篇:

参考官网:https://docs.microsoft.com/zh-cn/sql/odbc/reference/syntax/sqlallochandle-function?view=sql-server-ver15
有用的博客1:https://blog.youkuaiyun.com/serg_/article/details/1618317
有用的博客2:https://www.cnblogs.com/MakeView660/p/9578236.html

ODBC访问sql server数据库,比较麻烦。没有像使用occi那样访问oracle数据库那么方便(lsl20200817修正:occi访问oracle获取股票列表并不见得有多快,目前只是觉得能用就不改进了)。 批量操作并不好。如获取数据,执行sql后,还需要循环一个个取数据,很是麻烦,需要输入要获取的数据的类型。

可以所有列都是按SQL_C_CHAR字符类型来获取,后续使用数据的时候再转类型。代码如下:

int selectData(const string& sql,vector<string>& results)
{
   
   
    CHAR csql[SQL_MAX_OPTION_STRING_LENGTH] = {
   
    0 };
    strcpy_s(csql, sql.c_str());
    RETCODE ret = SQLExecDirect(hstmt1, (SQLCHAR*)csql, strlen(csql));
    if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO)
    {
   
   
        LLogError("select data error,error code:"<<ret);
        return ret;
    }
    SQLCHAR midData[MAXCHAR] = {
   
    0 };//注意这里:字符数组
    SQLLEN midDataLength = 0;
    SQLSMALLINT columnCount = 0;
    SQLNumResultCols(hstmt1,&columnCount);
    int line = 0;
    while (SQLFetch(hstmt1) != SQL_NO_DATA_FOUND)
    {
   
   
        // 参数1为执行语句的句柄,
        // 参数2为所要得到的数据位于的列数(SQL语句中),
        // 参数3为数据类型,这个比较多,需要看一下MSDN
        // 参数4为保存的位置(地址),
        // 参数5为参数4可用的位置,既然参数3已设定为长整型,所以这里可使用0
        // 参数6为实际返回的长度
        stringstream ss;
        ++line;
      
本文章已经生成可运行项目
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值