OleDbConnection - почему не работает?
От: lindemann  
Дата: 07.04.04 11:36
Оценка:
Почему не работает код вида:
public class Class1
{
private OleDbConnection cn;

public Class1()
{
cn = new OleDbConnection("Provider=MySQLProv;Data Source=mydatabase;");
cn.Open();
}

~Class1()
{
cn.Close();
}
}

Выпадает по exceprion Handle is not initialized.

Я знаю, что так делать нежелательно, но все же — почему оно падает? В чем ошибка?
Re: OleDbConnection - почему не работает?
От: Сергей Глазунов Украина  
Дата: 07.04.04 12:10
Оценка: -1
Здравствуйте, lindemann, Вы писали:

L>Я знаю, что так делать нежелательно, но все же — почему оно падает? В чем ошибка?


используй OdbcConnection
... << RSDN@Home 1.1.3 stable >>
Re: OleDbConnection - почему не работает?
От: DmitryMS  
Дата: 07.04.04 12:19
Оценка: -1
check if connection has been opened before closing it in your constructor:

if (con.State == ConnectionState.Open)
{
}

also, this check only makes scence when you use static variables which you don't.

/sorry for the Eng./
Re: OleDbConnection - почему не работает?
От: desperado_gmbh http://www.livejournal.com/users/tolstopuz
Дата: 07.04.04 12:38
Оценка: +1
Здравствуйте, lindemann, Вы писали:

L>~Class1()

L>{
L> cn.Close();
L>}
L>Я знаю, что так делать нежелательно, но все же — почему оно падает? В чем ошибка?

Это не деструктор в понимании C++, а финализатор. Сборщик мусора вызывает их в непредсказуемом порядке, поэтому в них можно освобождать только выделенные в этом классе unmanaged-ресурсы, не обращаясь к другим managed-объектам. Скорее всего, в данном случае финализатор OleDbConnection уже вызван, а Close пытается сделать те же действия повторно.

Overriding the Finalize Method
Implementing a Dispose Method
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.