DB Wrapper, IDisposable richtig implementiert?

04/08/2008 - 11:44 von IsaakTaylor | Report spam
Hallo,

habe eine Klasse für den Zugriff auf ne SQLite Datenbank-Datei
geschrieben. Ist das so in Ordnung?

public class SQLiteXXXDAO : IXXXDAO, IDisposable
{
protected bool isDisposed;
protected SQLiteConnection connection = null;

public SQLiteXXXDAO()
{
this.isDisposed = false;
// SQLiteFactory provides a static connection to the database
this.connection = (SQLiteConnection)
SQLiteFactory.GetConnection();
}

~SQLiteXXXDAO()
{
this.Dispose(false);
}

public void Dispose()
{
if (this.isDisposed) throw new
ObjectDisposedException(this.ToString());
this.Dispose(true);
}

protected void Dispose(bool isDisposedByUser)
{
if (isDisposedByUser)
{

}
else
{

}

this.isDisposed = true;
}

/// <summary>
/// Transactions, begins a transaction.
/// </summary>
public void BeginTransaction()
{
using (SQLiteCommand command = new SQLiteCommand())
{
command.Connection = connection;
command.CommandText = "begin transaction;";
command.ExecuteNonQuery();
}
}

...

Danke!!!
 

Lesen sie die antworten

#1 Elmar Boye
05/08/2008 - 10:10 | Warnen spam
Hallo Isaak,

schrieb:
habe eine Klasse für den Zugriff auf ne SQLite Datenbank-Datei
geschrieben. Ist das so in Ordnung?

public class SQLiteXXXDAO : IXXXDAO, IDisposable
{
protected bool isDisposed;
protected SQLiteConnection connection = null;

public SQLiteXXXDAO()
{
this.isDisposed = false;
// SQLiteFactory provides a static connection to the database
this.connection = (SQLiteConnection)
SQLiteFactory.GetConnection();
}

~SQLiteXXXDAO()
{
this.Dispose(false);

}

public void Dispose()
{
if (this.isDisposed) throw new
ObjectDisposedException(this.ToString());
this.Dispose(true);



Hier sollte zudem stehen:
GC.SuppressFinalize(this)

Siehe auch Beispiel zu IDisposable:
<URL:http://msdn.microsoft.com/en-us/lib...e.aspx>

}

public void BeginTransaction()
{
using (SQLiteCommand command = new SQLiteCommand())
{
command.Connection = connection;
command.CommandText = "begin transaction;";
command.ExecuteNonQuery();




In BeginTransaction solltest Du eine SQLteTransaction verwenden.
Ein mehrfacher Aufruf sollte eine Ausnahme erzeugen.
In Dispose sollte eine nicht abgeschlossene Transaktion
abgebrochen werden.

Gruß Elmar

Ähnliche fragen