StoredProcedures.cpp
上传用户:jsxglz
上传日期:2007-01-03
资源大小:117k
文件大小:3k
源码类别:

SQL Server

开发平台:

Visual C++

  1. /////////////////////////////////////////////////////////////////////////////
  2. // CStoredProcedure - Implementation file
  3. #include "stdafx.h"
  4. #include "StoredProcedures.h"
  5. #ifdef _DEBUG
  6. #define new DEBUG_NEW
  7. #undef THIS_FILE
  8. static char THIS_FILE[] = __FILE__;
  9. #endif
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CStoredProcedures
  12. IMPLEMENT_DYNAMIC(CStoredProcedures, CRecordsetEx)
  13. CStoredProcedures::CStoredProcedures(CDatabase* pDatabase)
  14. : CRecordsetEx(pDatabase)
  15. {
  16. m_strProcedureQualifier = _T("");
  17. m_strProcedureOwner = _T("");
  18. m_strProcedureName = _T("");
  19. m_strRemarks = _T("");
  20. m_fProcedureType = 0;
  21. m_nFields = 5;
  22. }
  23. BOOL CStoredProcedures::Open(LPCSTR pszProcQualifier,
  24. LPCSTR pszProcOwner,LPCSTR pszProcName,
  25. UINT nOpenType)
  26. {
  27. RETCODE nRetCode;
  28. UWORD bFunctionExists;
  29. // Make sure SQLProcedures is supported
  30. AFX_SQL_SYNC(::SQLGetFunctions(m_pDatabase->m_hdbc,
  31. SQL_API_SQLPROCEDURES,&bFunctionExists));
  32. if(!Check(nRetCode))
  33. AfxThrowDBException(nRetCode, m_pDatabase, m_hstmt);
  34. if(!bFunctionExists)
  35. throw "<::SQLProcedures> not supported.";
  36. // Cache state info and allocate hstmt
  37. SetState(nOpenType,NULL,readOnly);
  38. if(!AllocHstmt())
  39. return FALSE;
  40. TRY
  41. {
  42. OnSetOptions(m_hstmt);
  43. AllocStatusArrays();
  44. // Call the ODBC function
  45. AFX_ODBC_CALL(::SQLProcedures(m_hstmt,
  46. (UCHAR FAR*)pszProcQualifier,SQL_NTS,
  47. (UCHAR FAR*)pszProcOwner,SQL_NTS,
  48. (UCHAR FAR*)pszProcName,SQL_NTS));
  49.   if(!Check(nRetCode))
  50. AfxThrowDBException(nRetCode, m_pDatabase, m_hstmt);
  51. // Allocate memory and cache info
  52. AllocAndCacheFieldInfo();
  53. AllocRowset();
  54. // Fetch the first row of data
  55. MoveNext();
  56. // If EOF, result set is empty, set BOF as well
  57. m_bBOF = m_bEOF;
  58. }
  59. CATCH_ALL(e)
  60. {
  61. Close();
  62. THROW_LAST();
  63. }
  64. END_CATCH_ALL
  65. return TRUE;
  66. }
  67. void CStoredProcedures::DoFieldExchange(CFieldExchange* pFX)
  68. {
  69. pFX->SetFieldType(CFieldExchange::outputColumn);
  70. RFX_Text(pFX,_T("PROCEDURE_QUALIFIER"),m_strProcedureQualifier);
  71. RFX_Text(pFX,_T("PROCEDURE_OWNER"),m_strProcedureOwner);
  72. RFX_Text(pFX,_T("PROCEDURE_NAME"),m_strProcedureName);
  73. RFX_Text(pFX,_T("REMARKS"),m_strRemarks);
  74. RFX_Int(pFX,_T("PROCEDURE_TYPE"),m_fProcedureType);
  75. }
  76. CString CStoredProcedures::GetDefaultConnect()
  77. return _T("ODBC;");
  78. }
  79. CString CStoredProcedures::GetDefaultSQL()
  80. return "!"; // Direct ODBC call
  81. }
  82. /////////////////////////////////////////////////////////////////////////////
  83. // CStoredProcedures diagnostics
  84. #ifdef _DEBUG
  85. void CStoredProcedures::AssertValid() const
  86. {
  87. CRecordsetEx::AssertValid();
  88. }
  89. void CStoredProcedures::Dump(CDumpContext& dc) const
  90. {
  91. CRecordsetEx::Dump(dc);
  92. }
  93. #endif //_DEBUG