Die CDatabase::GetConnect-Methode gibt eine leere Zeichenfolge in Visual Studio
Dieser Artikel hilft Ihnen bei der Lösung des Problems, bei dem die Methode in der CDatabase::GetConnect() Microsoft Foundation Class (MFC)-Bibliothek immer eine leere Zeichenfolge anstelle der aktiven Datenbankverbindungsinformationen in Visual Studio 2012 zurückgibt.
Originalversion des Produkts: Visual Studio Ultimate 2012, Visual Studio Premium 2012
Ursprüngliche KB-Nummer: 2915724
Problembeschreibung
In Visual Studio 2012 gibt die Methode in der CDatabase::GetConnect() MFC-Bibliothek immer eine leere Zeichenfolge anstelle der aktiven Datenbankverbindungsinformationen zurück.
Dieses Problem tritt auch in Visual Studio 2010 auf, wenn ein neuerer Hotfix als hotfix 2607393 installiert ist.
Dieses Problem tritt auch in Visual Studio 2008 auf, wenn ein Neuerer Hotfix als hotfix 2607389 installiert ist.
Ursache
Aus Sicherheitsgründen wurde das Verhalten der CDatabase Klasse geändert, sodass die GetConnect Methode eine leere Zeichenfolge zurückgibt.
Verwenden Sie eine der folgenden Methoden, um das Problem zu beheben.
Lösung 1: Ändern des Codes
Ändern Sie Den Code so, dass er vor der Leerzeichenfolgenbedingung geschützt wird. Erstellen Sie dazu eine Klasse, die von CDatabaseabgeleitet ist, und verwenden Sie diese Klasse als Datenbankklasse in Ihrer Anwendung.
Überschreiben Sie in dieser abgeleiteten Klasse die OpenEx Methode. Rufen Sie in der Überschreibung zuerst die CDatabase Version von OpenEx auf, um sicherzustellen, dass die Verbindungszeichenfolge aus dem Aufruf SQLDriverConnectvon abgerufen wird. Entschlüsseln und speichern Sie dann die Verbindungszeichenfolge in einem CString Objekt, auf das Sie später verweisen können.
Lösung 2: Migrieren zu Visual Studio 2013
Verwenden Sie eine neuere Version von MFC. Verwenden Sie beispielsweise die Version, die in Visual Studio 2013 enthalten ist.
In Visual Studio 2013 gibt die GetConnect() Methode einen Wert zurückCString. Wenn die Methode aufgerufen wird, wird die verschlüsselte Verbindungszeichenfolge entschlüsselt und an den Aufrufer zurückgegeben, der dann für das Löschen des Speichers aus Sicherheitsgründen verantwortlich ist.