none
SQLFetch 出现0xC0000005错误 RRS feed

  • 问题

  • SQLBindCol(m_pStmt1,1,SQL_C_CHAR,m_szSName,sizeof(m_szSName),0);
    SQLBindCol(m_pStmt1,2,SQL_C_ULONG,&m_nSCompanyID,0,0);
    ....
    SQLBindCol(m_pStmt1,35,SQL_C_ULONG,&m_nExchangeClose,0,0);

    retcode = SQLExecute(m_pStmt1);
    if (retcode == SQL_SUCCESS)
    {
         while (true)
         {
              retcode = SQLFetch(m_pStmt1);
              if (retcode == SQL_NO_DATA) break;
              else{ ....}
         }
    }
    执行到SQLFetch到时候就出现  0x6d46f602 处未处理的异常: 0xC0000005: 读取位置 0x0000001b 时发生访问冲突。请问这是什么原因?

    2009年12月21日 3:42

答案

全部回复

  • 楼主,您好,请参考如下两篇文章,分别代表异常代码的含义:

    http://msdn.microsoft.com/en-us/library/ms818767.aspx

    http://msdn.microsoft.com/en-us/library/ms818868.aspx

    从上面的个出的信息得知,您最近可能安装了什么新硬件,你把新硬件移除后再试试。
    2009年12月24日 8:33
    版主
  • Exception code: C0000005 ACCESS_VIOLATION 是越界错误。

    可能的原因是你SQLBindCol()对于某一列指定的接收变量有问题:
    (1)对于定长列,BufferLength是不起作用的,所以要保证buffer足够大;或者
    (2)接收的buffer还没有分配空间。

    你的例子有35列,可以通过分割法看看具体是哪一个出问题。例如,先把17-35的注释掉,看看是前面部分有问题还是后面列有问题。

    SQLRETURN SQLBindCol(
          SQLHSTMT       StatementHandle,
          SQLUSMALLINT   ColumnNumber,
          SQLSMALLINT    TargetType,
          SQLPOINTER     TargetValuePtr,
          SQLLEN         BufferLength,
          SQLLEN *       StrLen_or_Ind);
    2010年1月8日 14:29
  • 我不认为这个和硬件有关,可能是你bind的buffer有问题。可以把你的SQLBindCol一行行注释掉,看到底是哪行导致的问题。

    2010年1月11日 7:46