{the magic lies between the brackets}

Schlagwort: C (Seite 3 von 3)

OleDB Exception -2147467259

Datenbank “ konnte nicht geöffnet werden. Entweder wird die Datenbank nicht von Ihrer Anwendung erkannt, oder die Datei ist beschädigt.

So lautete die Fehlermeldung, die ich bekam, als ich ein Update-Statement abschicken wollte.

Der Fehlercode lautete: -2147467259

Fieberhaft suchte ich dann nach einer Lösung.
Ist die Verbindung abgebrochen? War OleDBConnection.DataSource nicht richtig angegeben? Eine falsche Version der Datenbank?

All das konnte ich ausschließen, komischerweise funktionierte alles richtig – zumindest vor zwei Stunden noch.

Die Lösung war, und da hilft die Fehlermeldung überhaupt nicht weiter, ein Fehler im SQL-Statement.

Ich hab vergessen die WHERE Clause zu definieren, so hätte ich wohl aus Versehen alle Datensätze überschrieben.

Die Warnung war also doch nicht ganz nutzlos ;)

Warum dieser Fehler erst jetzt auffiel und nicht schon viel länger, bleibt mir allerdings rätselhaft.

[C#/.NET] – Listen nach einem bestimmten Eintrag durchsuchen

Oft möchte man den Index eines Eintrags oder den Eintrag in einer Liste finden.

 List<MyItemClass> myList = new List<MyItemClass>(); 

Bis vor kurzem tat ich das noch über eine for-schleife, welche durch die Liste läuft und einer if-Abfrage mit der abgefragt wird, ob der Wert gleich ist.
Dies war bei kleinen Listen auch kein Problem, jedoch steigt die benötigte Zeit überproportional zur Anzahl an Einträgen, sodass ich die Abfrage ändern musste.

Die Lösung meines Problems war:

        
       int mySearchedIndex = myList.FindIndex(
                delegate(MyItemClass myitem)
                { 
                return myitem.Value.ToString().Equals(myValue.ToString(), StringComparison.Ordinal); 
                });
       

Hier wird ein Delegate gebraucht, um eine anonyme Methode zu nutzen.
Diese anonyme Methode vergleicht den myitem.Value Wert (als String) mit dem myValue Wert (auch String).
Dieser Code funktioniert in C# 2.0.
Ab .NET 3.5 (C# 3.0) kann man für solche Operationen LINQ oder Lambda-Expressions nutzen.

Beispiel mit Lambda-Expressions:

 
MyItemClass myItem = myList.Where<MyItemClass>( item => return item.Value == myValue; ).Single<MyItemClass>();
int index = myList.IndexOf(myItem);

So hat man hier entweder den gesuchten Index oder direkt das gesuchte Objekt.