.net 为什么我需要Odbc阅读器的实例,但现在需要Odbc连接?

.net 为什么我需要Odbc阅读器的实例,但现在需要Odbc连接?,.net,odbc,c++-cli,.net,Odbc,C++ Cli,在班级层面,我宣布: System::Data::Odbc::OdbcConnection conn; System::Data::Odbc::OdbcDataReader datareader; //doesnt work System::Data::Odbc::OdbcDataReader^ datareader; //works 但是,dataReader必须声明为OdbcDataReader^。我不明白为什么。我不确定这是否回答了你的问题,但下面是: Connection和DataR

在班级层面,我宣布:

System::Data::Odbc::OdbcConnection conn;
System::Data::Odbc::OdbcDataReader datareader; //doesnt work
System::Data::Odbc::OdbcDataReader^  datareader; //works

但是,dataReader必须声明为OdbcDataReader^。我不明白为什么。

我不确定这是否回答了你的问题,但下面是:

Connection和DataReader类在.NET Framework上成对出现,具体取决于所使用的数据库技术。因此,您有OdbcConnection和OdbcDataReader,还有SqlConnection和SqlDataReader等。您必须始终成对使用它们。请注意,所有这些都实现了IDataConnection和IDataReader的通用接口

编辑。好吧,我完全误解了这个问题-/

我通常使用C,而不是C++,但我认为这是因为您可以直接创建ODBCCONNECT的新实例,但是对于OdbcDataReader,需要通过在相应的ODBCCORDER上执行ExeCudieDead方法来获得一个实例。ExecuteReader返回指向新OdbcDataReader对象的指针。

使用OdbcConnection conn;您正在直接在堆栈上实例化连接对象。不确定这是否是个好主意,但这是可能的


您不能使用OdbcDataReader来实现这一点;因为该类只有隐藏的私有/内部构造函数。也就是说,您不应该直接创建DataReader,而是通过调用ExecuteReader来获取它们。ExecuteReader返回OdbcDataReader^。请参阅。

谢谢,但我的问题是为什么我不需要在odbcconnection中使用handle,而我必须使用ODBCDataReader^?我需要直接实例化连接,因为许多方法共享它,并且它也作为parameter.Petr传递给其他类,如果您需要共享连接,那么您可能确实需要一个引用托管指针。虽然此答案的第二段很有帮助,但第一段事实上是不正确的-尽管存在语法现象,但实例不是在堆栈上创建的,它仍然在托管堆上;只是当作用域结束时,它会被决定性地处理。好的,谢谢。我知道C和C++,但不知道CLI的东西。请随意编辑,或复制粘贴到您自己的答案。