⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 appendx.cpp

📁 visual c++ 很全的ado的sample
💻 CPP
字号:
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" \
    no_namespace rename("EOF", "EndOfFile")

#include <ole2.h>
#include <stdio.h>
#include "conio.h"
#include "AppendX.h"

//Function declaration
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};
void AppendX(VOID);
void PrintProviderError(_ConnectionPtr pConnection);

///////////////////////////////////////////////////////////
//                                                       //
//      Main Function                                    //
//                                                       //
///////////////////////////////////////////////////////////
void main()
{
	HRESULT  hr = S_OK;

	if(FAILED(::CoInitialize(NULL)))
		return;

	AppendX();
	
	//Wait here for the user to see the output.
	printf("\n\nPress any key to continue...");
	getch();
	::CoUninitialize(); 
}


///////////////////////////////////////////////////////////
//                                                       //
//      AppendX Function                                 //
//                                                       //
///////////////////////////////////////////////////////////
VOID  AppendX(VOID)
{

	  HRESULT hr = S_OK;

    // Define ADO object pointers.
    // Initialize pointers on define.
    // These are in the ADODB::  namespace.
	 _RecordsetPtr pRstByRoyalty = NULL;
	 _RecordsetPtr pRstAuthors = NULL;  
	 _CommandPtr   pcmdByRoyalty = NULL;
	 _ParameterPtr pprmByRoyalty = NULL;
	 _ConnectionPtr pConnection = NULL;
	

	  //Define Other variables
	  IADORecordBinding   *picRs = NULL;  //Interface Pointer declared.(VC++ Extensions)   
	  CEmployeeRs emprs;          //C++ class object    

	 _bstr_t strCnn("Provider=sqloledb;Data Source=MyServer;"
			"Initial Catalog=pubs;User Id=sa;Password=;");

	 _bstr_t strMessage, strAuthorID;

	  int intRoyalty;
	  VARIANT vtRoyalty;

	try
	{
		//Open a Connection.
		TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
		hr = pConnection->Open(strCnn,"","",NULL);
		pConnection->CursorLocation = adUseClient;

		//Open Command Object with one Parameter
		TESTHR(pcmdByRoyalty.CreateInstance(__uuidof(Command)));
		pcmdByRoyalty->CommandText = "byroyalty";
		pcmdByRoyalty->CommandType = adCmdStoredProc;

		//Get parameter value and append parameter
		printf("Enter Royalty: ");
		scanf("%d",&intRoyalty);

		//Define Integer/variant.
		vtRoyalty.vt = VT_I2;
		vtRoyalty.iVal = intRoyalty;
		pprmByRoyalty = pcmdByRoyalty->CreateParameter("percentage",adInteger,adParamInput,sizeof(int),vtRoyalty);
		pcmdByRoyalty->Parameters->Append(pprmByRoyalty);
		
		pprmByRoyalty->Value  = vtRoyalty;
		  	
		//Create Recordset by executing the command
		pcmdByRoyalty->ActiveConnection = pConnection;
		pRstByRoyalty = pcmdByRoyalty->Execute(NULL,NULL,adCmdStoredProc); 

		//Open the authors table to get author names for display
		TESTHR(pRstAuthors.CreateInstance(__uuidof(Recordset)));

		//You have to explicitly pass the default Cursor type and LockType to the Recordset here
		hr = pRstAuthors->Open("authors",_variant_t((IDispatch*)pConnection,true),adOpenForwardOnly,adLockReadOnly,adCmdTable); 
	 
		//Open an IADORecordBinding interface pointer which we'll use for Binding Recordset to a class    
		TESTHR(pRstAuthors->QueryInterface(__uuidof(IADORecordBinding),(LPVOID*)&picRs));

	    //Bind the Recordset to a C++ Class here    
		TESTHR(picRs->BindToRecordset(&emprs));

		//Print current data in the recordset, adding
		//author names from author table.
		printf("Authors with %d percent royalty ",intRoyalty);

		while(!(pRstByRoyalty->EndOfFile))
		{
			strAuthorID = pRstByRoyalty->Fields->Item["au_id"]->Value;
			pRstAuthors->Filter = "au_id = '"+strAuthorID+"'";

			printf("\n"  "%s, %s  %s",emprs.lau_idStatus == adFldOK ? emprs.m_szau_id : "<NULL>",\
					emprs.lau_fnameStatus == adFldOK ? emprs.m_szau_fname : "<NULL>",\
					emprs.lau_lnameStatus == adFldOK ? emprs.m_szau_lname : "<NULL>");

			pRstByRoyalty->MoveNext(); 
			
		}

		//Release the IADORecordset Interface here   
		if (picRs)
		picRs->Release();
		
		pRstByRoyalty->Close();
		pRstAuthors->Close();
		pConnection->Close(); 
	}

	catch(_com_error &e)
	{
		_bstr_t bstrSource(e.Source());
		_bstr_t bstrDescription(e.Description());

		PrintProviderError(pConnection);

		printf("\n Source : %s \n Description : %s \n",(LPCSTR)bstrSource,(LPCSTR)bstrDescription);
	}

}


///////////////////////////////////////////////////////////
//                                                       //
//      PrintProviderError Function                      //
//                                                       //
///////////////////////////////////////////////////////////

VOID PrintProviderError(_ConnectionPtr pConnection)
{
	// Print Provider Errors from Connection object.
	// pErr is a record object in the Connection's Error collection.
	ErrorPtr    pErr  = NULL;
	long      nCount  = 0;    
	long      i     = 0;

	if( (pConnection->Errors->Count) > 0)
	{
		nCount = pConnection->Errors->Count;
		// Collection ranges from 0 to nCount -1.
		for(i = 0; i < nCount; i++)
		{
			pErr = pConnection->Errors->GetItem(i);
			printf("Error number: %x\n Error Description: %s"\n, pErr->Number,(LPCSTR) pErr->Description);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -