新手求助 如何用VC6得到SQL Server一个数据库的所有表名和表结构?
rt....用哪种方式比较好?有没有参考代码?

解决方案 »

  1.   

    BOOL CDlgTest::GetMicTab()
    {
     try 
    {  
    m_pRecordset=theApp.m_pConnection->OpenSchema(adSchemaTables);

    while(!(m_pRecordset->adoEOF))   
    {         
    //»ñÈ¡±í¸ñ    
    _bstr_t table_name = m_pRecordset->Fields->GetItem("TABLE_NAME")->Value;
    //»ñÈ¡±í¸ñÀàÐÍ        
    _bstr_t table_type = m_pRecordset->Fields->GetItem("TABLE_TYPE")->Value;
    //¹ýÂËһϣ¬Ö»Êä³ö±í¸ñÃû³Æ£¬ÆäËûµÄÊ¡ÂÔ
    if ( strcmp(((LPCSTR)table_type),"TABLE")==0)
    {
    m_cmbAlTab.AddString((LPCSTR)table_name);
    }       
    m_pRecordset->MoveNext();    
    }   
    m_pRecordset->Close();  
    }
    catch(_com_error e)///²¶×½Òì³£ 
    {  
    ::MessageBox(NULL,e.Description(),"Ìáʾ",MB_OK);
    return FALSE;
    }

    return true;}BOOL CDlgTest::GetMicFields()
    {

    _bstr_t   mStrSQL;
    CString   strSQL;
    CString   strColName;
    BSTR      bstrColName;
    long      ColCount,i; 
    Field *   field = NULL;
    HRESULT   hr;
    Fields *  fields = NULL;
    LPCTSTR   nameField;
    CString str;

    int nTable=m_cmbAlTab.GetCurSel();
    m_cmbAlTab.GetLBText(nTable,str);
    // strSQL.Format("SELECT * FROM %s",str);
    strSQL="select * from " + str;
    mStrSQL=strSQL; m_pRecordset->Open(mStrSQL,
    theApp.m_pConnection.GetInterfacePtr(),
    adOpenDynamic,
    adLockOptimistic,
    adCmdText);
    hr=m_pRecordset->get_Fields(&fields);//µÃµ½¼Ç¼¼¯µÄ×ֶμ¯ºÏ

    if(SUCCEEDED(hr))
    fields->get_Count(&ColCount);//µÃµ½¼Ç¼¼¯µÄ×ֶμ¯ºÏÖеÄ×ֶεÄ×ܸöÊý
    for(i=0;i<ColCount;i++)
    {
    fields->Item[i]->get_Name(&bstrColName);//&micro;&Atilde;&micro;&frac12;&frac14;&Ccedil;&Acirc;&frac14;&frac14;&macr;&Ouml;&ETH;&micro;&Auml;×&Ouml;&para;&Icirc;&Atilde;&ucirc;
    UINT uType=fields->Item[i]->Type;
    fields->Item[i]->DefinedSize;
    strColName=bstrColName;
    nameField=strColName;
    //m_cmbCol.AddString(nameField);
    m_List.SetItemText(i,0,nameField);
    m_List.SetItemText(i,1,(LPCTSTR)uType); }
    // OnSelchangeComTable();
    if(SUCCEEDED(hr))
    fields->Release();//&Ecirc;&Iacute;·&Aring;&Ouml;&cedil;&Otilde;&euml;
    // &sup1;&Oslash;±&Otilde;&frac14;&Ccedil;&Acirc;&frac14;&frac14;&macr;
    m_pRecordset->Close(); return true;}