在课程级别,我创建了参考:
System :: Data :: Odbc :: OdbcConnection Connection;
在某些方法中,我想将它设置为odbcCommand.Connection,如下所示:
:: System :: Data :: Odbc :: OdbcCommand Command; Command.Connection =这 - >连接;
它报告“无法将参数1从'System :: Data :: Odbc :: OdbcConnection'转换为'System :: Data :: Common :: DbConnection ^'”
如果Command.Connection需要OdBcConnection,我不明白它为什么会说常见:: DbConnection? 谢谢
答案 0 :(得分:0)
Command.Connection想要一个句柄(^)到System :: Data :: Common :: DbConnection
public:
property OdbcConnection^ Connection {
OdbcConnection^ get ();
void set (OdbcConnection^ value);
}
而是尝试这样做:
System::Data::Odbc::OdbcCommand Command;
Command.Connection = %Connection;
一元%运算符(Tracking reference)返回对CLI对象的CLI跟踪引用。跟踪引用对句柄和值类型有效。
对评论的回应:
以这种方式创建托管对象时:
OdbcConnection Connection;
这是一种特殊类型的C ++ / CLI对象,它们在堆栈上分配,并指向托管堆上的托管对象。它不是有效的托管引用对象。要创建托管引用,您需要执行以下操作。
OdbcConnection^ Connection; // In the class definition
// In the class constructor do the following:
Connection = gcnew OdbcConnection();
应该在构造函数中删除DB连接,以保证及时清理。但是托管对象不需要它们,它们会自动删除