%-Zeichen in Like Bedingung berücksichtigen

Man lernt ja nie aus, nach jahrelanger SQL-Erfahrung stand ich nun vor dem Problem aus einer Textspalte einer SQL-Server-Datenbank alle Werte mit einem ‘%’-Zeichen zu extrahieren. Einfacher gesagt als getan, den das ‘%’-Zeichen ist ein Platzhalter für beliebige Zeichen. Da mußte ich also doch Dokumentation wälzen und habe dann den Befehl gefunden, der hilfreich ist.

Man erweitert den LIKE Operator um den die Answeisung ESCAPE, dann klappt es.

match_expression [NOT] LIKE pattern [ESCAPE escape_character]

Im Beispiel sieht das so aus:

SELECT foo FROM batz WHERE txt LIKE '% 19!%' ESCAPE '!'

Hier ist das !-Zeichen das Escapezeichen für Prozent. Das tolle dabei ist, das der Escapecharakter seperat definiert werden kann, den man weis ja nie wie eine Bedingung aussehen kann und der SQL-Server kann nicht raten.

Das tolle bei dem SQL-Befehl ist, das er auch bei Oracle-Datenbanken funktioniert, und kann so in datenbankunabhänigigen Prgrammen verwendet werden.

Einzelne Seite im Querformat in einem Word Dokument

Heute wollte ich in Word eine Seite im Querformat in eine Dokument Einschieben das eigentlich im Hochformat eingerichtet war. Nach einiger Sucherei hab ich es dann gefunden, war einfacher als ich dachte. Da hat Microsoft doch gut mitgedacht.

Wer das so etwas auch in Word lösen möchte geht wie folgt vor:

  1. Am Ende der letzten Seite die hochformtig ist, fügst Du einen manuellen Abschnittwechsel ein (Einfügen -> Wechsel -> Abschnittwechsel (nächste Seite))
  2. Jetzt setzt Du den Cursor auf die neue erste Seite nach dem Abschnittwechsel und wählst als Format Querformat aus (Datei -> Seite einrichten -> Ausrichtung Quer)

… jetzt müßte der neue Abschnitt quer sein, während die Seiten davor weiter hochformatig sind. Dieses Spielchen läßt sich beliebig oft wieder holen.

Transaktionssichere Stored Procedure im SQL-Server 2005

Heute hatte ich wieder ein interessantes Problem im SQL-Server 2005. Ich musste eine Prozedure schreiben die Transactionssicher war, das heißt die Veränderungen im Fehlerfalle richtig zurücknimmt, aber auch ein Rollback durch äußere Transaktionen zuläßt.

Hier die Lösung die ich gefunden habe:


CREATE PROCEDURE [dbo].[UpdateOrInsertValue]

@Key int, --Primary Key
@Value money = 0 --Value

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

DECLARE @TranCounter INT;
SET @TranCounter = @@TRANCOUNT;
IF @TranCounter > 0
SAVE TRANSACTION VerteilungNachMonatenSpeichern;
ELSE
-- Procedure must start its own
-- transaction.
BEGIN TRANSACTION;

BEGIN TRY

-- Monat 1
UPDATE table1 SET Wert = @Value WHERE (ID = @Key)
if @@ROWCOUNT <1 Insert into Table1 (ID, Wert) values (@Key, @Value) IF @TranCounter = 0 COMMIT TRANSACTION; END TRY BEGIN CATCH IF @TranCounter = 0 -- Transaction started in procedure. -- Roll back complete transaction. ROLLBACK TRANSACTION; ELSE -- Transaction started before procedure -- called, do not roll back modifications -- made before the procedure was called. IF XACT_STATE() <> -1
-- If the transaction is still valid, just
-- roll back to the savepoint set at the
-- start of the stored procedure.
ROLLBACK TRANSACTION VerteilungNachMonatenSpeichern;
-- If the transaction is uncommitable, a
-- rollback to the savepoint is not allowed
-- because the savepoint rollback writes to
-- the log. Just return to the caller, which
-- should roll back the outer transaction.

-- After the appropriate rollback, echo error
-- information to the caller.
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;

SELECT @ErrorMessage = ERROR_MESSAGE();
SELECT @ErrorSeverity = ERROR_SEVERITY();
SELECT @ErrorState = ERROR_STATE();

RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH

END
GO

Failed to map the path ‘/YourApplication/App_GlobalResources’

Heute hatte ich ein ziemlich heftiges Problem mit einer ASP.Net-Installtion auf meiner Workstation, kann aber sicher auch auf Windows-Servern auftreten. Ich hatte eine funktionierende ASP.Net-Installation in meinem IIS, alles tat wunderbar. Eigentlich hatte ich nichts daran verändert, außer die üblichen Microsoft-Updates, diese müssen sich auf den IIS so ausgewirkt haben, das nix mehr ging. Ich würde es auf ein SP1 des Visual-Studio2005 schieben, das hat ja einige Änderungen am .Net-Framework vorgenommen. Möglicherweise ist beim Update was nicht korrekt aktualisiert worden.

Auf alle Fälle war aus die Maus, alle Webs meldeten folgenden Fehler:

Der Pfad /LISgoogleEarth/App_GlobalResources/ konnte nicht zugeordnet werden.
Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.

Ausnahmedetails: System.InvalidOperationException: Der Pfad /LISgoogleEarth/App_GlobalResources/ konnte nicht zugeordnet werden.

Quellfehler:

Beim Ausführen der aktuellen Webanforderung wurde einen unbehandelte Ausnahme generiert. Informationen über den Ursprung und die Position der Ausnahme können mit der Ausnahmestapelüberwachung angezeigt werden.

Stapelüberwachung:

[InvalidOperationException: Der Pfad /LISgoogleEarth/App_GlobalResources/ konnte nicht zugeordnet werden.]
System.Web.Hosting.HostingEnvironment.MapPathActual(VirtualPath virtualPath, Boolean permitNull) +3530188
System.Web.Compilation.BuildManager.CheckTopLevelFilesUpToDate2(StandardDiskBuildResultCache diskCache) +306
System.Web.Compilation.BuildManager.CheckTopLevelFilesUpToDate(StandardDiskBuildResultCache diskCache) +46
System.Web.Compilation.BuildManager.RegularAppRuntimeModeInitialize() +419
System.Web.Compilation.BuildManager.Initialize() +235
System.Web.Compilation.BuildManager.InitializeBuildManager() +228
System.Web.HttpRuntime.HostingInit(HostingEnvironmentFlags hostingFlags) +310

[HttpException (0x80004005): Der Pfad /LISgoogleEarth/App_GlobalResources/ konnte nicht zugeordnet werden.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +3435023
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +88
System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +252

——————————————————————————–
Versionsinformationen: Microsoft .NET Framework-Version:2.0.50727.42; ASP.NET-Version:2.0.50727.210

Ich habe im Netz gesucht und habe einige Hinweise gefunde woran es liegen könnte. Hauptsächlich ging es um den Zugriffschutz in der Registry. Bei mir lag es daran, das der Benutzer ASP (der Benutzer der im IIS ASP.Net-Anwendungen ausführt) hatte nicht genügend Rechte in der Registry auf folgenden Pfad: HKEY_CLASSES_ROOT\Interface\{70B51430-B6CA-11D0-B9B9-00A0C922E750}.

Bei anderen Benutzern fehleten Rechte auf das Verzeichnis C:\WINNT\Profiles\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys.

Sollte das nicht ausreichen empfiehlt es sich mit FileMon oder RegMon das Filesystem oder die Registry zu monitoren, ich denke so wird man schnell das Probelm finden.

P.S: Auf diese Tip gibt es keine Garantie das es das Problem auch bei Ihnen löst.

Window-Update – Fehler 0x8DDD0009

Heute gab es wieder Spaß mit Windows. Diesmal war der Windows-Update-Service betroffen, nach dem letzten Patch-Day der Windows-Update-Service über den Internet-Explorer nicht mehr ausgeführt werden. Es kam zu einem Fehler mit der Fehlernummer: 0x8DDD0009

Der Internet-Explorer schlug eine Lösung vor: Internet-Explorer schließen (mußte ich erst abschießen), temporäre Dateien löschen und nochmal probieren.

Hat aber nicht geholfen. Nach etwas googlen und im Forenlesen ab ich dann die Lösung gefunden die bei mir funktioniert hat.

Als erstes habe ich die msxml3.dll neu registriert. Das geht ganz einfach. Unter “Start/Ausführen” (oder Windows-Taste + R) gibt man “regsvr32 msxml.dll” ein.

Als nächstes stoppt man den Dienst Automatisches Update im Dienstmanager. (zu finden in der Computerverwaltung/dienste in der Systemsteuerung) Nachdem das passiert ist, muß man das Verzeichnung {Windows}\SoftwareDistribution löschen oder umbenennen. Ich habe es erstmal umbenannt. Wenn man das getan hat, startet man den Dienst wieder und öffnet den Internet-Explorer.

Im Internet-Explorer löscht man alle temporären Dateien, und auch die Offline-Inhalte und startet das Windows-Update, was dann sauber funktionieren sollte.

Ich hoffe allen Betroffenen damit geholfen zu haben.

Freie Bücher zum Thema Softwareentwicklung

Fast wieder ein Netzfundstück der Woche. Die Galileo Press GmbH veröffentlich interessante Fachbücher aus dem Bereich Softwareentwicklung zum online lesen und herunterladen.

Zur Zeit sind folgende Bücher als Openbooks verfügbar:

Viel Spaß beim lesen und lernen.

Was man von Kindern lernen kann

  • Ein großes Wasserbett enthält ausreichend Wasser, um ein Haus von 180 Quadratmetern 10 cm hoch unter Wasser zu setzen.
  • Wenn man Haarspray auf Staubbällchen sprüht und mit Inline-Skatern darüber fährt, können sich die Staubbällchen entzünden.
  • Die Stimme eines Dreijährigen ist lauter als 200 Erwachsene in einem vollen Restaurant.
  • Wenn man eine Hundeleine an einem Deckenventilator befestigt, ist der Motor nicht stark genug, um einen 20 Kilogramm schweren Jungen, der Batman-Unterwäsche und ein Superman-Cape trägt, rundherum zu befördern.
  • Die Motorkraft reicht dagegen aus, wenn ein Farbeimer am Ventilator hängt, die Farbe auf allen vier Wänden eines 6 x 6 Meter großen Zimmers zu verteilen.
  • Man sollte keine Baseball-Bälle hochwerfen, wenn der Deckenventilator eingeschaltet ist. Soll der Deckenventilator als Schläger verwendet werden, muß man den Ball einige Male hochwerfen, bevor er getroffen wird. Ein Deckenventilator kann einen Baseball-Ball sehr weit schlagen.
  • Fensterscheiben (selbst Doppelverglasung) halten einen von einem Deckenventilator geschlagenen Baseball-Ball nicht auf.
  • Wenn Sie die Klospülung hören, gefolgt von “Oh weia”, ist es schon zu spät.
  • Eine Mixtur aus Bremsflüssigkeit und Domestos erzeugt Rauch, viel Rauch.
  • Ein Sechsjähriger kann mit einem Feuerstein eine Flamme erzeugen, auch wenn ein 36jähriger Mann sagt, daß das nur im Film möglich ist.
  • Und mit einer Lupe kann man selbst an verhangenen Tagen Feuer machen.
  • Einige Legosteine können das Verdauungssystem eines Vierjährigen passieren.
  • Knetmasse und die Mikrowelle sollten niemals im gleichen Satz erwähnt werden.
  • Kraftkleber hält ewig.
  • Egal, wie viel Götterspeise man in den Swimming Pool tut, es ist nicht möglich, über das Wasser zu gehen.
  • Poolfilter mögen keine Götterspeise.
  • Videorecorder spucken keine Sandwiches aus, auch wenn das in manchen Werbespots im Fernsehen gezeigt wird.
  • Müllbeutel sind keine guten Fallschirme.
  • Murmeln im Tank machen beim Fahren eine Menge Lärm.
  • Sie möchten lieber nicht wissen, was das für ein Gestank ist.
  • Schauen Sie immer in den Ofen, bevor Sie ihn anstellen. Plastikspielzeuge vertragen den Ofen nicht.
  • Die Feuerwehr in Austin, Texas, ist innerhalb von 5 Minuten da.
  • Regenwürmern wird vom Schleudergang der Waschmaschine nicht schwindelig.
  • Katzen dagegen wird sehr wohl schwindelig.
  • Wenn Katzen schwindelig ist, erbrechen sie das Doppelte ihres Körpergewichts