OLEDBMFCMultipleSet.h
上传用户:benben_wyd
上传日期:2010-02-26
资源大小:1229k
文件大小:3k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // OLEDBMFCMultipleSet.h : interface of the COLEDBMFCMultipleSet class
  2. //
  3. /////////////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_OLEDBMFCMULTIPLESET_H__61B08419_B233_11D2_9949_A7BC39D74A45__INCLUDED_)
  5. #define AFX_OLEDBMFCMULTIPLESET_H__61B08419_B233_11D2_9949_A7BC39D74A45__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. class CRowDefinition
  10. {
  11. public:
  12. CRowDefinition()
  13. {
  14. memset( (void*)this, 0, sizeof(*this) );
  15. };
  16. char    column1[62];
  17. char    column2[51];
  18. };
  19. class COLEDBMFCMultipleSet : public CCommand<CManualAccessor, CRowset, CMultipleResults>
  20. {
  21. public:
  22.     CRowDefinition m_Rows;      //Row Definition
  23.     int m_iResultNumber;        //Current result
  24.     char m_columnName1[17];     //Name of the first column
  25.     char m_columnName2[17];     //Name of the second column
  26. //The open function was moved to the .CPP file since.
  27.     COLEDBMFCMultipleSet() {    //Constructor
  28.         m_iResultNumber = 0;    //Initialize the result number
  29.     };
  30. HRESULT Open() {
  31. //For the original Open function, 
  32. //view the OpenSession function
  33. HRESULT hr;
  34. if (m_iResultNumber == 0) {
  35. hr = OpenSession();
  36. if (hr != S_OK) 
  37. return hr;
  38. }
  39. //Open the rowset to get the information 
  40. //so we can then bind the columns
  41. hr = CCommand<CManualAccessor, CRowset, CMultipleResults>::
  42. Open(NULL, NULL, false);
  43. if (hr != S_OK)
  44. return hr;
  45. if (m_iResultNumber == 1) {
  46. m_iResultNumber = 2;
  47. //Get the next result set, but don't bind it.
  48. GetNextResult(NULL, false);
  49. strcpy(m_columnName1, "Student Name:");
  50. strcpy(m_columnName2, "Student EMAIL:");
  51. }
  52. else {
  53. //First result set.  No extra code needed
  54. m_iResultNumber = 1;
  55. strcpy(m_columnName1, "Department Code:");
  56. strcpy(m_columnName2, "Department Name:");
  57. }
  58. CreateAccessor(2, &m_Rows, sizeof(CRowDefinition));
  59. AddBindEntry(1, DBTYPE_STR, 
  60. sizeof(m_Rows.column1), 
  61. &m_Rows.column1);
  62. AddBindEntry(2, DBTYPE_STR, 
  63. sizeof(m_Rows.column2), 
  64. &m_Rows.column2);
  65. Bind();
  66. return MoveNext();
  67. }
  68. HRESULT OpenSession() {  //Used to be HRESULT Open()
  69. CDataSource db;
  70. CSession session;
  71. HRESULT hr;
  72. CDBPropSet dbinit(DBPROPSET_DBINIT);
  73. dbinit.AddProperty(DBPROP_AUTH_PASSWORD, "");
  74. dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
  75. dbinit.AddProperty(DBPROP_AUTH_USERID, "sa");
  76. dbinit.AddProperty(DBPROP_INIT_CATALOG,  "Classes");
  77. dbinit.AddProperty(DBPROP_INIT_DATASOURCE, "(local)");
  78. dbinit.AddProperty(DBPROP_INIT_LCID, (long)1033);
  79. dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
  80. hr = db.OpenWithServiceComponents("SQLOLEDB.1", &dbinit);
  81. if (FAILED(hr))
  82. return hr;
  83. hr = session.Open(db);
  84. if (FAILED(hr))
  85. return hr;
  86. //Create a new SQL statement
  87.         hr = Create(session, "EXEC TestMultipleRowset");
  88.         if (FAILED(hr))
  89.             return hr;
  90. //Prepare the statement to be executed once
  91.         return Prepare(1);
  92. //The rest of this functionality has been moved 
  93. //to the Open function
  94. };
  95. };
  96. //{{AFX_INSERT_LOCATION}}
  97. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  98. #endif // !defined(AFX_OLEDBMFCMULTIPLESET_H__61B08419_B233_11D2_9949_A7BC39D74A45__INCLUDED_)