2009-11-04 5 views
0

Au niveau de la classe, j'ai créé référence:Impossible de définir OdbcConnection à OdbcCommand.Connection

System :: Data :: :: Odbc OdbcConnection Connexion;

dans une méthode que je veux mettre à odbcCommand.Connection comme ceci:

:: System :: Data :: :: Odbc OdbcCommand Commande; Command.Connection = this-> Connexion;

Il signale "ne peut pas convertir le paramètre 1 de 'System :: Data :: :: Odbc OdbcConnection' à 'System :: Data :: Common :: DbConnection ^'"

Je ne comprends pas pourquoi il parle common :: DbConnection si le Command.Connection attend OdBcConnection? Merci

Répondre

0

Command.Connection veut une poignée (^) à un système de données :: :: :: Common DbConnection

public: 
property OdbcConnection^ Connection { 
    OdbcConnection^ get(); 
    void set (OdbcConnection^ value); 
} 

Essayez plutôt de le faire:

System::Data::Odbc::OdbcCommand Command; 
Command.Connection = %Connection; 

Le unaire % operator (Tracking reference) renvoie une référence de suivi CLI à un objet CLI. Les références de suivi sont valides pour les poignées et les types de valeur.

Réponse au commentaire:

Lorsque vous créez un objet géré de cette façon:

OdbcConnection Connection; 

Il est un type spécial d'objet C++/CLI qui sont attribués sur la pile et que les points à l'objet géré sur le tas géré. Ce n'est pas un objet de référence géré valide. Pour créer une référence gérée, vous devez procéder comme suit.

OdbcConnection^ Connection; // In the class definition 

// In the class constructor do the following: 
Connection = gcnew OdbcConnection(); 

Et la connexion DB doit être supprimée dans le constructeur pour garantir un nettoyage rapide. Mais il n'est pas nécessaire pour les objets gérés, ils sont supprimés automatiquement

+0

Merci! Cependant je ne comprends pas pourquoi seule la référence ne suffit pas. – Petr

+0

J'ai ajouté la réponse dans la réponse ci-dessus. –

Questions connexes