.net 无法将OdbcConnection设置为OdbcCommand.Connection

.net 无法将OdbcConnection设置为OdbcCommand.Connection,.net,c++,odbc,.net,C++,Odbc,在类级别上,我创建了引用: System::Data::Odbc::Odbc连接 在某些方法中,我想将其设置为odbcCommand。连接方式如下: ::System::Data::Odbc::OdbcCommand命令; Command.Connection=此->连接 它报告“无法将参数1从'System::Data::Odbc::OdbcConnection'转换为'System::Data::Common::DbConnection^'” 如果Command.Connection需要Od

在类级别上,我创建了引用:

System::Data::Odbc::Odbc连接

在某些方法中,我想将其设置为odbcCommand。连接方式如下:

::System::Data::Odbc::OdbcCommand命令; Command.Connection=此->连接

它报告“无法将参数1从'System::Data::Odbc::OdbcConnection'转换为'System::Data::Common::DbConnection^'”

如果Command.Connection需要OdBcConnection,我不明白为什么它会提到common::DbConnection?
谢谢

命令。Connection需要System::Data::Common::DbConnection的句柄(^)

public:
property OdbcConnection^ Connection {
    OdbcConnection^ get ();
    void set (OdbcConnection^ value);
}
相反,尝试这样做:

System::Data::Odbc::OdbcCommand Command; 
Command.Connection = %Connection;
一元%operator()返回对CLI对象的CLI跟踪引用。跟踪引用对句柄和值类型有效

对评论的答复:

以这种方式创建托管对象时:

OdbcConnection Connection;
它是一种特殊类型的C++/CLI对象,在堆栈上分配,并指向托管堆上的托管对象。它不是有效的托管引用对象。要创建托管引用,您需要执行以下操作

OdbcConnection^ Connection; // In the class definition 

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

施工中应删除DB连接,以保证及时清理。但托管对象不需要它,它们会自动删除

谢谢!但是我不明白为什么仅仅参考是不够的。我在上面的回答中补充了答案。