你可以看一看MSDN中的例子StdReg,他比较详细!

解决方案 »

  1.   

    这是我的一个比较完整的代码,使用了一个CListCtrl列出系统里的数据源
    ///////////////////////////////////
    //Try SQLDataSources() Function
    SQLHANDLE  hConn=SQL_NULL_HANDLE;
    SQLHENV    hODBCEnv=SQL_NULL_HANDLE;
    SQLRETURN  Rs=NULL;
    Rs= ::SQLAllocHandle (SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hODBCEnv);
    if(Rs!=SQL_SUCCESS)return;
    Rs=SQLSetEnvAttr(hODBCEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
    if(Rs!=SQL_SUCCESS) MessageBox("Set Version Failure");  

    //Clear and Init The List Box;
    LVCOLUMN Column;
    DWORD Style;
    if(m_ListCtrl.GetItemCount ())
    m_ListCtrl.DeleteAllItems (); memset(&Column,0,sizeof(Column));
    Column.pszText=new char [100];
    Column.cchTextMax = 100;
    Column.mask=LVCF_WIDTH |LVCF_FMT|LVCF_TEXT|LVCF_SUBITEM ;
    while(m_ListCtrl.GetColumn (0,&Column))
    {
    m_ListCtrl.DeleteColumn (0);
    }
    delete Column.pszText; memset(&Column,0,sizeof(Column));
    Column.mask=LVCF_WIDTH |LVCF_FMT|LVCF_TEXT|LVCF_SUBITEM ;
    Column.fmt=LVCFMT_LEFT ;
    Column.cx=100;
    Column.pszText=new char[100];
    strcpy(Column.pszText,"DSN");
    m_ListCtrl.InsertColumn (0,&Column);
    delete Column.pszText;
    m_ListCtrl.InsertColumn (1,"Description",LVCFMT_LEFT,200);
    Style=m_ListCtrl.GetStyle ();
    Style|=LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES;
    m_ListCtrl.SetExtendedStyle (Style);


    //Begin
    UWORD fDirection= SQL_FETCH_FIRST;
    SQLCHAR szDSN[SQL_MAX_DSN_LENGTH+1]="";
    SQLCHAR szDescription[100];
    while (Rs==SQL_SUCCESS)
    {
    Rs=::SQLDataSources (hODBCEnv,fDirection,
    szDSN,sizeof(szDSN),NULL,
    szDescription,sizeof(szDescription),NULL
    );
    fDirection=SQL_FETCH_NEXT;
    if((Rs!=SQL_SUCCESS)&&(Rs!=SQL_NO_DATA_FOUND))
    {
    MessageBox((char *)szDescription,(char *)szDSN,MB_OK);
    }
    else
    {
    if((Rs!=SQL_NO_DATA_FOUND))
    {
    m_ListCtrl.InsertItem (m_ListCtrl.GetItemCount(),(char *)szDSN,0);
    m_ListCtrl.SetItemText (m_ListCtrl.GetItemCount()-1,1,(char *)szDescription);
    }
    }
    } ////////////////////////////////////////////////
    //
    if(hODBCEnv!=SQL_NULL_HANDLE)
    {
    ::SQLFreeHandle (SQL_HANDLE_ENV,hODBCEnv);
    }