Thursday, April 6, 2006

.NET BLog

Ab sofort habe ich einen technischen BLog, welcher sich Schwerpunktmäßig mit .NET und Compact Framework befasst . Zu finden unter:

 

http://weblogs.netug.de/haggy/

Posted by Haggy at 14:52:29 | Permalink | No Comments »

Thursday, March 9, 2006

Datenbanksuche aber Schnell

So mein letztes BLog posting ist schon eine ganze Weile her, da überall viel zu erledigen war. Nun habe ich aber einen kleinen Augenblick gefunden um die CompactFramework (.NET Framework für PDA) Section etwas füllen z

Meine Heimatsprache liegt ja eigentlich in VFP insofern bin ich es gewohnt viele schnelle Datenbankoperationen direkt in meiner Entwicklungsumgebung zu haben. Wie Z.bsp. ein LookUp() oder der Seek()

In .NET speziell im Compact Framework gibt es auch eine ganze Reihe von Möglichkeiten, welche aber nicht so einfach zur Verfügung stehen.
Im Rahmen eines Imports benötigte ich jedoch eine Methode, welche es ermöglicht so schnell wie möglich feststellen zu können ob ein Datensatz bereits existiert, diese wird auch Mehrfach hinterinander aufgerufen.

Deswegen habe ich versucht 2 Methoden zu implementeieren welche den VFP SEEK() und LOOKUP sehr nahe kommen. Hierzu habe insbesodnere in den Newsgroups anleitung gefunden.
Diese Methode läuft sowohl mit SQLCe also auch dem SQL Mobile 3.0

///

/// SqlCeCommand Objekt für die Seek und lookup methode

///

SqlCeCommand Seekcmd;

 

///

/// SQlCEDataReader für Lookup() und Seek

///

SqlCeDataReader rdr;

 

///

/// Prüft auf einem Indes ob die angebene ID in dem Index Felder der angegebenen Tabelle existiert

///

///

Tabelle in der gesucht wird

///

ID nach der gesucht wird

///

Indiziertes Feld in dem gesucht wird, ohne Index -> Exception

/// bool ob gefunden

public bool Seek(string tcTable, string tcID, string tcIndexField)

{

// BaseTable Search = VFP indexbased Seek() Like Suche

bool llFound = false;

 

// Wir suchen auf der angebenen Tabelle

Seekcmd.CommandText = tcTable;

 

// und dem angebenen Index

Seekcmd.IndexName = tcIndexField;

 

// Die Range gibt an für welchen Bereich espäter ein Reader erzeugt werden soll.

// In unserem Fall eben genau dieser eine Wert. Ein Reader hat den Vortiel dass wir nicht erst selektieren

// müssen sondern uns einfach direkt auf den Zielsatz setzen werden.

Seekcmd.SetRange(DbRangeOptions.Match , new object[] { tcID }, null);

 

// wir erzeugen uns aus TableName,Index und Range einen Reader

using (this.rdr = Seekcmd.ExecuteReader())

{

 

//// Prüfen ob wir einen Reader erzeugen konnten.

if (this.rdr != null && !this.rdr.IsClosed && this.rdr.HasRows)

{

 

//Wenn nun das erste lesen klappt haben wir einen satz gefunden!

if (rdr.Read())

{

llFound = true;

}

 

}

 

// Reader schliesen

this.rdr.Close();

}

return llFound;

}

Posted by Haggy at 19:00:16 | Permalink | Comments (2)