求解:SQLGetData或者SQLBindData:Run-Time Check Failure #2 - Stack around the variable

点点半桶水 2011-09-17 10:26:38
首先,给出出现错误的源码,如下:
RETCODE rc;
SQL_DATE_STRUCT FCreateTime;
SQLINTEGER cbFCreateTime=0;
//rc = SQLGetData(hStmt, 8, SQL_C_DEFAULT, &FCreateTime, sizeof(FCreateTime), &cbFCreateTime);
rc = SQLFetch(hStmt);
if(SQL_NO_DATA == rc || SQL_ERROR == rc)
return;
rc = SQLGetData(hStmt, 8, SQL_C_DEFAULT, &FCreateTime, sizeof(FCreateTime), &cbFCreateTime);

当函数退出后,出现一下错误:
Run-Time Check Failure #2 - Stack around the variable 'FCreateTime' was corrupted.
其实,C语言的程序员,应该基本都知道是堆栈越界赋值引起的。可是,上面的代码,或许本人学习不够精,无法从何下手。虽然网上有一种解决方案:
上面代码如果在VS6.0是不会出错的,以上版本就会出错,一个解决方案是:
项目(Project)——》项目属性(Propertys Alt+F7)——》C/C++——》代码生成(Code Generation)——》基本运行时检查(Basic Runtime Checks)设置为默认(Default),
不错,这样可以解决。可是,毕竟是内存堆栈方面出现错误了,我还是想知道上面的代码,在不改基本运行时检查项情况下如何解决?谢谢
...全文
111 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
点点半桶水 2011-09-17
  • 打赏
  • 举报
回复
不好意思,自己解决了,原来是自己声明时间类型不正确,SQL_DATE_STRUCT FCreateTime 改为 SQL_TIMESTAMP_STRUCT FCreateTime。由于数据库是DateTime类型(日期+时间),前者仅为日期,SQLBindCol和SQLGetData是根据数据库类型来复制值的,所以使用前者就会越界赋值的情况

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧