请问如何得到SQL SERVER数据库中所有表的表名,如数据库名为"ABC"

解决方案 »

  1.   

    odbc遍历求数据库中表名:  
    bool  CDBInfoDlg::ListTables(bool  bViews,  bool  bSystemTables)  
    {  
               CDatabase database;  
               CString type = "'TABLE'";  
               int  ret= -1;  
               HSTMT hStmt;  
               UCHAR szName[256];  
               SDWORD cbName;  
               CString names;   
               if(  bViews  )  
                   type  +=  ",  'VIEW'";//视图  
               if(  bSystemTables  )  
                   type  +=  ",  'SYSTEM  TABLE'";//系统表   
               try{  
                   if(  !database.Open(m_strDSN)  )  
                       return  false;  
               }  
               catch(...)
               {  
                   AfxMessageBox("Unable  To  Obtain  Table  Information");  
                   return  false;  
               }  
               SQLAllocStmt(database.m_hdbc,&hStmt);  
               ret  =  SQLTables(hStmt, NULL,SQL_NTS,  
                                 NULL,SQL_NTS,  
                                 NULL,SQL_NTS,  
                                 (unsigned  char  *)type.GetBuffer(0),SQL_NTS);   
               if(ret  ==  SQL_ERROR)
               {  
                    SQLFreeStmt(hStmt,SQL_CLOSE);  
                    database.Close();  
                    if(ret == SQL_INVALID_HANDLE )
                    {  
                         AfxMessageBox("Invalid  handle");  
                         return  false;  
                    }  
                    AfxMessageBox("Database  Could  Not  be  Open");  
                    return  false;  
               }            
               m_cmbTables.ResetContent();          
               while(1){                        
                   ret  =  SQLFetch(hStmt);  
                   if(ret  ==  SQL_NO_DATA_FOUND)  
                         break;  
                   ret  =  SQLGetData(hStmt,3,SQL_C_CHAR,szName,TABLE_NAME_LENGTH,                             &cbName);  
                   names.Format("%s",szName);  
                   m_cmbTables.AddString(names);  
               }             m_cmbTables.SetCurSel(0);  
                 
               SQLFreeStmt(hStmt,SQL_CLOSE);  
               database.Close();  
                 
               ShowTable();  
     
               return  true;  
    }