我以前也在这儿问过这个问题,没有结果
后来改用ADO了 :)

解决方案 »

  1.   

    假如要用ado的话,那这个程序就要大改了,各位帮帮忙,应该很简单的吧
      

  2.   

    也许是这一条语句有问题:pColumnInfo[2].ulColumnSize=1024
    数据库字段的长度应该不可能答到1024这末长,常见的数据库字段最大长度为250。绝大多数字段的长度应该在100以下。若超过200,应该用text或image字段。你先看看数据库表的结构,看该字段的长度为多少。若长度为40,则应该是:pColumnInfo[2].ulColumnSize=41.
      

  3.   

    改成如下形式好了。不过nColumnNum必须是你执行SQL语句szSQL后返回值的列数。例如对于“select IDNo,Name from t_TestTbl”,nColumnNum必须等于2。
    另Session是一个CSession,建立数据库连接时可获得。#define FIELD_BUF_LEN 1024
    struct MYBIND
    {
    MYBIND()
    {
    memset(this, 0, sizeof(*this));
    }
    TCHAR   szValue[FIELD_BUF_LEN];
    DWORD   dwStatus;
    };。。
    CCommand<CManualAccessor> rs;
    struct MYBIND* pBind    = NULL;
    pBind = new MYBIND[nColumnNum];
    rs.CreateAccessor(nColumnNum, pBind, sizeof(MYBIND) * nColumnNum);
    for (int l=0; l<nColumnNum; l++)
    {
        rs.AddBindEntry(l+1, DBTYPE_STR, sizeof(TCHAR) * FIELD_BUF_LEN, &pBind[l].szValue, NULL, &pBind[l].dwStatus);
    }

    if (rs.Open(Session, szSQL)) != S_OK)
       AfxThrowOLEDBException(rs.m_spCommand, IID_ICommand);

       CStringArray Record;
       CString str;

       while(rs.MoveNext() == S_OK)
       {
         for (int j=1; j<=nColumnNum; j++)
         {
    if (pBind[j-1].dwStatus == DBSTATUS_S_ISNULL)
    {
       Record.Add("");
    }
    else
    {
        str = pBind[j-1].szValue;
                 str.TrimRight();
                 Record.Add(str);
              }
           }

       }