0

I am currently having problems with my ADO connection string. I have searched all over the internet for a solution to this problem but I have yet to find a solution. Can someone help me with the proper configuration for a SQL OLEDB connection with a windows authentication? I have attached my C++ code file and a printscreen of my SQL Server Express signon screen.

Attachments
// ConnectionString.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
// ConnectionStringSampleCpp.cpp
// compile with: /EHsc
//#import "msado15.dll" no_namespace rename("EOF", "EndOfFile")
#import "c:\Program Files\Common Files\System\ADO\msado15.dll"    no_namespace rename("EOF", "EOFile")

// 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;

   ConnectionStringX();
   ::CoUninitialize();
}

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.
      TESTHR(pConnection1.CreateInstance(__uuidof(Connection)));
      //pConnection1->ConnectionString = "Provider='sqloledb';Data Source='(local)';"
      //   "Initial Catalog='DSNPubs';Integrated Security='SSPI';";
      //pConnection1->ConnectionString = "Provider='sqloledb';Server='PCD-LT-MCERTINI\\SQLEXPRESS';"
	  //  "AttachDbFilename='C:\\SQL Server 2000 Sample Databases\\NORTHWND.mdf';Initial Catalog='northwind';Trusted_Connection=Yes;";
	  pConnection1->ConnectionString = "Provider='SQLOLEDB.1';Persist Security Info='True';User ID='mcertini';Initial Catalog='northwind';Data Source='PCD-LT-MCERTINI\\SQLEXPRESS';";
	  //pConnection1->ConnectionString = "Provider='SQLNCLI10';Data Source='NORTHWND.mdf';";
	  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'.
      //TESTHR(pConnection2.CreateInstance(__uuidof(Connection)));
      //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.
      //TESTHR(pConnection3.CreateInstance(__uuidof(Connection)));
      //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'.
      //TESTHR(pConnection4.CreateInstance(__uuidof(Connection)));
      //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.
      PrintProviderError(pConnection1);
      if (pConnection2)
         PrintProviderError(pConnection2);

      if (pConnection3)
         PrintProviderError(pConnection3);

      if (pConnection4)
         PrintProviderError(pConnection4);

      PrintComError(e);
   }

   // Cleanup objects before exit.
   if (pConnection1)
      if (pConnection1->State == adStateOpen)
         pConnection1->Close();

   if (pConnection2)
      if (pConnection2->State == adStateOpen)
         pConnection2->Close();

   if (pConnection3)
      if (pConnection3->State == adStateOpen)
         pConnection3->Close();

   if (pConnection4)
      if (pConnection4->State == adStateOpen)
         pConnection4->Close();
}

_bstr_t GetState(int intState) {
   _bstr_t strState; 
   switch(intState) {
   case adStateClosed:
      strState = "adStateClosed";
      break;
   case adStateOpen:
      strState = "adStateOpen";
      break;
   default:
      ;
   }
   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("Error\n");
   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);
}
2
Contributors
3
Replies
5
Views
7 Years
Discussion Span
Last Post by ForexSurfr
0

The following is an error message I am receiving:

Error number: 80040e4d Login failed for user 'mcertini'.
Error
Code = 80040e4d
Code meaning = I
Source = Microsoft OLE DB Provider for SQL Server

0

MS-SQL server can operate in one of the two security modes:
1. Windows Authentication
2. Sql Server authentication

Read more on this subject - http://msdn.microsoft.com/en-us/library/aa905171(SQL.80).aspx

For Ms-SQL Express edition, use Windows Authentication,

pConnection1->ConnectionString = "Provider=SQLOLEDB;Data Source=.\\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=northwind";
0

adatapost,

Thank you for your response. I have made the changes you requested but continue to get an error message. Below is the error message:

Error number: 80004005 Cannot generate SSPI context
Error
Code = 80004005
Code meaning = U
Source = Microsoft OLE DB Provider for SQL Server

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.