文章目录
整体总结
用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;

本文探讨了ODBC和ADO在数据库操作中的应用,指出ADO在易用性和效率上的优势,并提供了ODBC连接及操作的具体示例代码,包括SQL语句执行和数据获取过程。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



