ADO - Connection "clonen"



  • Kennt ihr eine Möglichkeit in ADO (ohne .NET!) eine Connection zu "clonen". Was ich haben möchte wäre eine Connection die genau gleich einer gegebenen ist, allerdings eigene, unabhängige Transaktionen hat/macht.

    Bzw. genaugenommen müsste ich bloss SQL Statements ausführen können OHNE dass die rückgängig gemacht würden wenn die aktuelle Transaction mit Fehler/Rollback beendet wird.



  • Hol dir doch nach dem Öffnen der ersten Verbindung einfach den Connection String, User und Passwort und öffne damit die zweite.



  • Ja klar ginge das. Bloss wäre es besser/schöner/toller wenn es anders auch ginge.



  • Du meinst so?

    *pConnection2 = *pConnection1
    

    😃 😃
    Nee, im ernst: Wenn du Glück hast, gibts im Connection Objekt irgendwo ne Struktur wo alles drinsteht was du brauchst, aber an sonsten musst du dir wohl ne Hilfsfunktion schreiben. Ist ja im Prinzip auch nicht viel, es sei denn du setzt nach dem Verbinden noch irgendwelche Cursor,Transaktions-Parameter oder sowas



  • Es geht mir darum eine enge Koppelung zwischen dem Teil der die ADO Connection erstellt und dem Teil der sie klonen müsste zu vermeiden.

    Im Prinzip würde ich das Ding gerne klonen, ganz egal wo es hergekommen ist und wie es entstanden ist. Also auch ohne z.B. den Usernamen und/oder Passwort zu kennen. Ich finde dazu aber keine Funktion. Mit etwas Glück bin ich aber nur zu doof richtig zu gucken bzw. habe was übersehen.



  • Hab mir das mal aus Spass in meine ADO Klassen reingebaut und es funktionert supi (Oracle und Firebird getestet)

    // MFC
    bool CMyADOConnection::Clone(ExtADOConnectionPtr& SourceCon, ExtADOConnectionPtr& DestCon)
    {
    	CString szStr = (LPTSTR)SourceCon->GetConnectionString();
    	char* pUserPass = NULL;
    
    	try
    	{	
    		DestCon.CreateInstance(__uuidof(ADODB::Connection));
    		HRESULT hRes = DestCon->Open(szStr.GetBuffer(0), pUserPass, pUserPass, NULL);
    	}
    	catch(_com_error &Err)
    	{
    		// Peng!
    		return false;
    	}	
    
    	return true;
    }
    

    (edit)
    ADODB ist natürlich mein Namespace und ExtADOConnectionPtr ist ein Typedef:

    typedef ADODB::_ConnectionPtr	ExtADOConnectionPtr;
    

Anmelden zum Antworten