2009-11-04 53 views
0

在一流水平,我已经创建了参考:无法设置OdbcConnection到OdbcCommand.Connection

系统::数据:: ODBC :: OdbcConnection连接;

在一些方法我想将它设置为odbcCommand.Connection这样

::系统::数据:: ODBC ::的OdbcCommand命令; Command.Connection = this-> Connection;

它报告“无法转换参数1‘系统::数据:: ODBC :: OdbcConnection’到‘系统::数据::常见::的DbConnection ^’”

我不明白为什么它谈common :: DbConnection如果Command.Connection期望OdBcConnection? 谢谢

回答

0

Command.Connection想要一个句柄(^)到系统::数据::常见::的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(); 

应该在构造函数中删除数据库连接,以保证及时清理。但它不需要管理对象,它们自动删除

+0

谢谢!但我不明白为什么只有参考是不够的。 – Petr 2009-11-04 08:02:28

+0

我在上面的答案中添加了回复。 – 2009-11-04 09:56:03