aber bei mir werden auch Dezimalzahlen als ergebnis vorkommen
ja, aber kommen Sie im konkreten Testfall vor? Führ das SQL doch mal in der Konsole aus und sieh Dir das Ergebnis an. SQLite hat ja bzgl. Typen eine recht eigene Sicht auf die Welt. Anders als viele Andere DBs wird dort ja vieles als Text gespeichert und/oder implizit konvertiert...
falls Du - wie Programmierhans das vorschlägt - das Problem auf der Datenbank lösen möchtest, würde ich von "NOT IN" abraten und auch dort eher "EXCEPT" (bzw. "MINUS" in Oracle) oder aber einen "LEFT JOIN" verwenden. Lange IN-Listen können ziemlich langsam werden und NOT ist bei den meisten DBs nicht Index untersützt.
TCP ist nicht dafür gedacht eine bestimmte Latenz zu garantieren, sondern um sicherzustellen, dass alle Pakete beim Empfänger ankommen. Alternativ könntest Du UDP nehmen, dass aber keine Zustellung der Pakete prüft.
nicht unüblich ist dafür auch in der Tabelle ein gültig-von und evtl. auch gültig- bis datum zu setzen. Bei einer Änderung wird der neue Datensatz mit dem aktuellen Datum gefüllt. Falls man ein Bis-Datum verwendet wird dieses beim neuen Satz auf High-Value, beim alten auf das Gültig-Ab des neuen Satzes gesetzt (offenes Intervall). Entspricht Kimbles slowly changing dimension vom Typ 2 (SCD2). Das Bis-Datum ist eigentlich überflüssig (es sei denn man will auch Löschen können), hat aber den Charme die aktuell güligen Sätze leicht ab gültig-bis = high-value erkennen zu können und ermöglicht zudem Zeitraum bezogene Auswertungen.
Das kann man gut auch mit Triggern machen, was den Vorteil hat, dass auch manuelle SQLs mit erfasst werden. Nachteilig kann hier die Performance bei Massenupdates sein. Bei einer Dialoganwendung ist das aber selten ein Problem.
Oder natürlich mit dem Selfjoin wie von "witte" beschrieben. Das hat den Charme, dass das Ansi-SQL ist, wird aber bei mehr Spalten irgenwann unleserlich und langsamer als PIVOT (bei Oracle).
ich denke, Du wirst den Stream so lange unstersuchen müssen bis Du sicher bist, ob der zu ersetzende String enthalten oder nicht enthalten ist.
Pseudocodemäßig sowas in der Richtung vielleicht?
i=-1
repeat
readStream(inByte)
i++
until(inByte != suchString[i] || i=suchString.length())
case
when i=0 //erstes Zeichen passt schon nicht -> also direkt das Zeichen
return(inByte)
when i=suchString.length() //alle passen, also den ersetzString
return(ersetzString())
else // suchsString passt bis zur Position i, also bis dahin zurück
return(suchString().substr(1,i)+inByte)
end
hast Du in der Tabelle irgendwo einen Default Wert definiert? Diese werden dann anstelle von NULL verwendet. Wenn nein würde ich mal nach Besonderheiten bei der BLOB-Verabeitung suchen. So kann Oracle z.B. zwei BLOBs nicht ohne weiteres Vergleichen.
Money ist im Gegensatz zu Decimal kein ANSI SQL Datentyp. Wenn es keinen zwingenden Grund gegen die Verwendung gibt würde ich eher den ANSI-Typ verwenden.
USE databaseA;
GO
BEGIN TRANSACTION;
BEGIN TRY
DELETE FROM Test
Insert Into Test VALUES ('test','test','Hast','test','test');
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
GO
daDa ich eine Tabelle komplett lösche und dann erst Insert mache und wenn dann beim Inser-Query ein fehler kommt bleibt die tabelle leer und das will ich vermeiden, sodass wenn der insert - query falsch ist ich noch die alten datensätze habe.
ist ein doch durch genau eine Transaktion ohnehin gewährleistet. Einfach den Delete und den Insert ausführen, wenn es zu keinem Fehler kam COMMIT, sonst ROLLBACK.
Allerdings könnte ich mir denken, das die Straßenliste sehr lang werden kann, was zumindest dem Erzeugen einer temp-Tabelle in der DB entgegen stehen kann.
Ich würde also noch einnmal darüber nachdenken, ob eine Matrix wirklich die richtige Lösung für Euer Grundproblem ist.
Ich hab's beim Überfliegen zwar nicht verstanden, aber vielleicht hilft es Dir. Alles in allem bin ich mir nicht so sicher, ob es für die Interaktion mit Datenbanken immer so hilfreich ist Table-Adapter oder EFs zu verwenden. Die versprechen zwar alles einfacher zu machen, bereiten aber auch oft Kopfzerbrechen...
könnte daran liegen, dass Du die beiden Inserts seit gestern in unterschiedlichen Transaktionen durchzuführen versuchst. Innnerhalb einer Transaktion sieht man auch nicht committete Daten, die außerhalb der Transaktion nicht zu sehen sind.
Wie man das im TableManager steuert habe ich aber keine Ahnung. Wenn Du den Code von gersten noch hast kannst Du ja mal ein diff machen und nach Transaktion oder dergl. suchen...
das entspricht der Auflösungstabelle zwischen Rolle und Tabelle. Rechte können m.E. natürlich unterscheidlich sein (lesen, schreiben, löschen, ...). Ich fand grade dies:
naja, eine Matrix scheint mir da nicht das Richtige. Normalerweise verknüpft man eine USER- und eine Rollen-Tabelle über eine Zwischentabelle zur auflösung der n:m-Beziehung (einer user kann mehrere Rollen, eine Rolle mehrere User haben).
Die meisten DB-System haben solche Berechtigungsystem. Falls Du ein eigenes Programmieren willst würde ich dringed zum Studium eigehender Literatur zum Thema Berechtigungsystem raten. So wie Du das planst ist das etnweder so genial, dass bisher noch niemand anderes drauf gekommen ist, oder aber die meisten haben das Kozept verworfen, weil es zu Problemen führt...
Wenn Du lediglich die Daten dauerhaft speichern willst, keine spezielle DB Funktionalität benötigst und keine riesigen Datenmengen hast würde ich daher XML nehmen. Kann man vor dem Speichern auch noch mit GZIP klein machen, falls die Dateigröße ein Problem darstellen sollte. Zudem bietet Linq ja auch einiges von dem, wozu man sonst gerne SQL verwendet.
Create Table aus einem Programm ist zumindest ungewöhnlich. In aller Regel benötigen klassische SQL-Datenbanken kostante Datenstrukturen für ein effizientes Arbeiten. Bei SQL-Lite sieht die Sache evtl. etwas anders aus, da der Optimizer dort sehr dynamisch zu arbeiten scheint. Mit No-SQL DBs kenne ich mich nicht aus, so weit ich weß sind die gut für große Datenmengen wenig oder nicht strukturierter Daten geeignet.