Columns.cpp
资源名称:ISQL_src.zip [点击查看]
上传用户:jsxglz
上传日期:2007-01-03
资源大小:117k
文件大小:3k
源码类别:
SQL Server
开发平台:
Visual C++
- // Columns.cpp: implementation of the CColumns class.
- //
- #include "stdafx.h"
- #include "interactivesql.h"
- #include "Columns.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- //////////////////////////////////////////////////////////////////////
- // CColumns
- IMPLEMENT_DYNAMIC(CColumns, CRecordsetEx)
- CColumns::CColumns(CDatabase* pDatabase)
- : CRecordsetEx(pDatabase)
- {
- m_strTableQualifier = _T("");
- m_strTableOwner = _T("");
- m_strTableName = _T("");
- m_strColumnName = _T("");
- m_nDataType = 0;
- m_strTypeName = _T("");
- m_nPrecision = 0;
- m_nLength = 0;
- m_nScale = 0;
- m_nRadix = 0;
- m_fNullable = 0;
- m_strRemarks = _T("");
- m_nFields = 12;
- }
- BOOL CColumns::Open(LPCSTR pszTableQualifier,
- LPCSTR pszTableOwner,LPCSTR pszTableName,LPCSTR pszColumnName,
- UINT nOpenType)
- {
- RETCODE nRetCode;
- UWORD bFunctionExists;
- // Make sure SQLColumns is supported
- AFX_SQL_SYNC(::SQLGetFunctions(m_pDatabase->m_hdbc,
- SQL_API_SQLCOLUMNS,&bFunctionExists));
- if(!Check(nRetCode))
- AfxThrowDBException(nRetCode, m_pDatabase, m_hstmt);
- if(!bFunctionExists)
- throw "<::SQLColumns> not supported.";
- // Cache state info and allocate hstmt
- SetState(nOpenType,NULL,readOnly);
- if (!AllocHstmt())
- return FALSE;
- TRY
- {
- OnSetOptions(m_hstmt);
- AllocStatusArrays();
- // Call the ODBC function
- AFX_ODBC_CALL(::SQLColumns(m_hstmt,
- (UCHAR FAR*)pszTableQualifier,SQL_NTS,
- (UCHAR FAR*)pszTableOwner,SQL_NTS,
- (UCHAR FAR*)pszTableName,SQL_NTS,
- (UCHAR FAR*)pszColumnName,SQL_NTS));
- if (!Check(nRetCode))
- ThrowDBException(nRetCode,m_hstmt);
- // Allocate memory and cache info
- AllocAndCacheFieldInfo();
- AllocRowset();
- // Fetch the first row of data
- MoveNext();
- // If EOF, result set is empty, set BOF as well
- m_bBOF = m_bEOF;
- }
- CATCH_ALL(e)
- {
- Close();
- THROW_LAST();
- }
- END_CATCH_ALL
- return TRUE;
- }
- void CColumns::DoFieldExchange(CFieldExchange* pFX)
- {
- pFX->SetFieldType(CFieldExchange::outputColumn);
- RFX_Text(pFX,_T("TABLE_QUALIFIER"),m_strTableQualifier);
- RFX_Text(pFX,_T("TABLE_OWNER"),m_strTableOwner);
- RFX_Text(pFX,_T("TABLE_NAME"),m_strTableName);
- RFX_Text(pFX,_T("COLUMN_NAME"),m_strColumnName);
- RFX_Int(pFX,_T("DATA_TYPE"),m_nDataType);
- RFX_Text(pFX,_T("TYPE_NAME"),m_strTypeName);
- RFX_Long(pFX,_T("PRECISION"),m_nPrecision);
- RFX_Long(pFX,_T("LENGTH"),m_nLength);
- RFX_Int(pFX,_T("SCALE"),m_nScale);
- RFX_Int(pFX,_T("RADIX"),m_nRadix);
- RFX_Int(pFX,_T("NULLABLE"),m_fNullable);
- RFX_Text(pFX,_T("REMARKS"),m_strRemarks);
- }
- CString CColumns::GetDefaultConnect()
- {
- return _T("ODBC;");
- }
- CString CColumns::GetDefaultSQL()
- {
- return "!"; // Direct ODBC call
- }
- /////////////////////////////////////////////////////////////////////////////
- // CColumns diagnostics
- #ifdef _DEBUG
- void CColumns::AssertValid() const
- {
- CRecordsetEx::AssertValid();
- }
- void CColumns::Dump(CDumpContext& dc) const
- {
- CRecordsetEx::Dump(dc);
- }
- #endif //_DEBUG