ConnectionString、ConnectionTimeout 和 State 属性示例 (VC + +) ConnectionString, ConnectionTimeout, and State Properties Example (VC++)

此示例演示使用 ConnectionString 属性打开 连接 对象的不同方法。This example demonstrates different ways of using the ConnectionString property to open a Connection object. 它还使用 ConnectionTimeout 属性设置连接超时期限,并使用 state 属性来检查连接状态。It also uses the ConnectionTimeout property to set a connection timeout period, and the State property to check the state of the connections. 运行此过程需要 GetState 函数。The GetState function is required for this procedure to run.


如果要连接到支持 Windows 身份验证的数据源提供程序,应在连接字符串中指定 Trusted_Connection = yes集成安全性 = SSPI 而不是用户 ID 和密码信息。If you are connecting to a data source provider that supports Windows authentication, you should specify Trusted_Connection=yes or Integrated Security = SSPI instead of user ID and password information in the connection string.

// ConnectionStringSampleCpp.cpp  
// compile with: /EHsc  
#import "msado15.dll" no_namespace rename("EOF", "EndOfFile")  
// Function declarations  
inline void TESTHR(HRESULT x) {if FAILED(x) _com_issue_error(x);};  
void ConnectionStringX();  
_bstr_t GetState(int intState);   
void PrintProviderError(_ConnectionPtr pConnection);  
void PrintComError(_com_error &e);  
int main() {  
   if (FAILED(::CoInitialize(NULL)))  
      return 0;  
void ConnectionStringX() {  
   // Define Connection object pointers.  Initialize pointers on define.  These are in the ADODB::  namespace  
   _ConnectionPtr pConnection1 = NULL;  
   _ConnectionPtr pConnection2 = NULL;  
   _ConnectionPtr pConnection3 = NULL;  
   _ConnectionPtr pConnection4 = NULL;  
   // Define Other Variables  
   HRESULT hr = S_OK;  
   try {  
      // Open a connection using OLE DB syntax.  
      pConnection1->ConnectionString = "Provider='sqloledb';Data Source='(local)';"  
         "Initial Catalog='Pubs';Integrated Security='SSPI';";  
      pConnection1->ConnectionTimeout = 30;  
      pConnection1->Open("", "", "",adConnectUnspecified);  
      printf("cnn1 state: %s\n", (LPCTSTR)GetState(pConnection1->State));  
      // Open a connection using a DSN and ODBC tags.  
      // It is assumed that you have create DSN 'DataPubs' with a user name as   
      // 'MyUserId' and password as 'MyPassword'.  
      pConnection2->ConnectionString = "DSN=DataPubs;UID=MyUserId;PWD=MyPassword;";  
      pConnection2->Open("", "", "", adConnectUnspecified);  
      printf("cnn2 state: %s\n", (LPCTSTR)GetState(pConnection2->State));  
      // Open a connection using a DSN and OLE DB tags.  
      pConnection3->ConnectionString = "Data Source=DataPubs;";  
      pConnection3->Open("", "", "", adConnectUnspecified);  
      printf("cnn3 state: %s\n", (LPCTSTR)GetState(pConnection3->State));  
      // Open a connection using a DSN and individual arguments instead of a connection string.  
      // It is assumed that you have create DSN 'DataPubs' with a user name as   
      // 'MyUserId' and password as 'MyPassword'.  
      pConnection4->Open("DataPubs", "MyUserId", "MyPassword", adConnectUnspecified);  
      printf("cnn4 state: %s\n", (LPCTSTR)GetState(pConnection4->State));  
   catch(_com_error &e) {  
      // Notify user of any errors.  Pass a connection pointer accessed from the Connection.  
      if (pConnection2)  
      if (pConnection3)  
      if (pConnection4)  
   // Cleanup objects before exit.  
   if (pConnection1)  
      if (pConnection1->State == adStateOpen)  
   if (pConnection2)  
      if (pConnection2->State == adStateOpen)  
   if (pConnection3)  
      if (pConnection3->State == adStateOpen)  
   if (pConnection4)  
      if (pConnection4->State == adStateOpen)  
_bstr_t GetState(int intState) {  
   _bstr_t strState;   
   switch(intState) {  
   case adStateClosed:  
      strState = "adStateClosed";  
   case adStateOpen:  
      strState = "adStateOpen";  
   return strState;  
void PrintProviderError(_ConnectionPtr pConnection) {  
   // Print Provider Errors from Connection object.  
   // pErr is a record object in the Connection's Error collection.  
   ErrorPtr  pErr = NULL;  
   if ( (pConnection->Errors->Count) > 0) {  
      long nCount = pConnection->Errors->Count;  
      // Collection ranges from 0 to nCount -1.  
      for ( long i = 0 ; i < nCount ; i++ ) {  
         pErr = pConnection->Errors->GetItem(i);  
         printf("Error number: %x\t%s\n", pErr->Number, (LPCSTR)pErr->Description);  
void PrintComError(_com_error &e) {  
   _bstr_t bstrSource(e.Source());  
   _bstr_t bstrDescription(e.Description());  
   // Print Com errors.    
   printf("\tCode = %08lx\n", e.Error());  
   printf("\tCode meaning = %s\n", e.ErrorMessage());  
   printf("\tSource = %s\n", (LPCSTR) bstrSource);  
   printf("\tDescription = %s\n", (LPCSTR) bstrDescription);  

另请参阅See Also

ADO) 的连接对象 ( Connection Object (ADO)
(ADO) 的 ConnectionString 属性 ConnectionString Property (ADO)
ConnectionTimeout 属性 (ADO) ConnectionTimeout Property (ADO)
State 属性 (ADO)State Property (ADO)