Schau dir mal Jailer an, das könnte sein was du suchst.
Zitat
Jailer is a tool for database subsetting, schema and data browsing. It exports consistent, referentially intact row-sets from relational databases. It removes obsolete data without violating integrity. It is DBMS agnostic (by using JDBC), platform independent, and generates DbUnit datasets, hierarchically structured XML, and topologically sorted SQL-DML.
Ich kann dir jetzt aber nicht sagen ob der auch aus StoredProcedures exportieren kann.
Dazu musst du die Schleife in einem Thread laufen lassen.
Dann kannst du die Eingabe von der Konsole einlesen während die Schleife läuft.
Anschließend merkst du dir die Eingabe in einer Variable, die du in der Schleife überprüfen kannst.
Aber irgendwann muss ich ja auch wieder auf meine instanzieren Wert Value in der ChannelBase Instanz zugreifen und muss den tatsächlichen Typen wissen und eine Variable von genau diesem Typen angelegen können.
Für den Code, den du da gezeigt hast, ist das nicht notwendig.
Du rufst im Endeffekt ja nur ToString() auf und was da raus kommt bestimmt die jeweilige Implementierung von ChannelBase.
Ich würde folgendes versuchen:
Einen pre-Commit-Hook einbauen und dabei MSBuild mit deiner Solution aufrufen. Laut Doku wird der Commit dann abgebrochen wenn ein Exit-Code ungleich 0 zurück kommt.
Mein Wissen in die Richtung hört aber leider ab hier auf :)
Da SVN (Quellcodeverwaltung) nur ein Teil der Funktionen des TFS ist, gibt es sowas nicht von Haus aus. Man kann in den Workflow von SVN allerdings mit sog. Hooks eingreifen. In diese Richtung würde ich mal weitersuchen.
gibt es beim Profiler von VS 2013 die Möglichkeit, dynamisch generierte Assemblies zu profilen?
Wir verwenden die Castle.Core Bibliothek, um über einen Proxy automatisch Datenbankverbindung und Transaktionen zu verwalten (also öffnen, schliessen, commit, rollback usw). Dazu wird von Castle.Core eine Assembly zur Laufzeit generiert.
Nun wollte ich ein Performance-Problem analysieren und habe festgestellt, dass der Profiler nicht bis in konkrete DB-Methode durch dringt, sondern beim Aufruf der Proxy-Methode endet.
Ich vermute jetzt, dass der Profiler hier nicht weitergeht, da ihm ja die generierte Assembly nicht bekannt ist.
Gibt es da eine Möglichkeit, dem Profiler diese Assemblies bekannt zu machen oder muss ich auf einen anderen Profiler ausweichen, der das kann?
gibt es unter Windows die Möglichkeit, sich irgendwie (über einen Hook o.ä.) benachrichtigen zu lassen, wenn ein bestimmter Prozess ein neues Fenster erzeugt?
Aktuell durchsuche ich die Fensterhandles eines Prozesses nach einer bestimmten Klasse in einer Schleife und führe weitere Aktionen aus, wenn ein Ergebnis gefunden wird:
private void Run(object state)
{
while (_running)
{
foreach (var handle in EnumerateProcessWindowHandles(Process.GetProcessesByName("process").First().Id))
{
var classname = new StringBuilder(256);
Native.GetClassName(handle, classname, classname.Capacity);
if (classname.ToString() == "zuSuchendeKlasse")
{
//...
}
}
Thread.Sleep(100);
}
}
private IEnumerable<IntPtr> EnumerateProcessWindowHandles(int processId)
{
var handles = new List<IntPtr>();
foreach (ProcessThread thread in Process.GetProcessById(processId).Threads)
Native.EnumThreadWindows(thread.Id,
(hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero);
return handles;
}
Jetzt würde ich gern die Schleife eliminieren wenn es geht.
Ich habe wie folgt gemessen, einmal das ganze mit Aufruf einer Methode und einmal direkt.
Debug- oder Release-Build? Hast du das ganze auch mehrmals gemacht?
Ich kann dir nur dazu raten, was zommi und weismat auch schon gesagt haben: Um ein Problem zu beheben muss man erst mal das Problem erkennen.
Ungezielt drauf los zu basteln ist immer eine schlechte Idee, denn wir alle wissen -> "premature optimization is the root of all evil".
Für Pfade sollte man besser Uri.EscapeDataString verwenden. Das arbeitet im Gegensatz zu den HttpUtility-Methoden nach der RFC 2396.
Ich finde allerdings grade die Quelle dafür nicht mehr, wo genau die Unterschiede sind. Ich weißt nur, dass wir mit den HttpUtilitiy-Methoden Probleme hatten.
In der Vergangenheit war es so das man Release Builds, nur dann mit Express, erstellen konnte, wenn das Profil so voreingestellt war. Express Versionen haben einfach nur die Einstellungsmöglichkeiten verweigert.
Also dein Vorhaben ergibt zwar keinen Sinn, aber so gehts:
Transaktion öffnen.
Ersten Insert absetzen.
Delete absetzen.
Zweiten Insert absetzen.
Transaktion committen.
Wenn der Commit durch geht kannst du dir sicher sein dass die 3 Querys erfolgreich waren.
Wenn beim Commit eine Exception fliegt -> Rollback.
Was vbprogger vorschlägt klappt leider nicht da man sich zwischen dem Commit und dem Rollback entscheiden muss.
Der SQL Server arbeitet nach dem ACID-Prinzip, d.h. entweder ganz oder gar nicht. So wie du dir das vorstellst ist es nicht möglich da zwischen dem "Testen" und dem "Ausführen" eine unbekannte Zeitspanne liegt in der alles mögliche passieren kann.
Edit: Wie stellst du dir das überhaupt vor? Tabelle löschen und dann in diese Tabelle was einfügen? Hä?
nur so als Hinweis, für die Verbindung zu SQL Compact brauchst du eine SqlCeConnection. Da ist wohl irgendwo eine Überprüfung auf eine SqlConnection drin.
Aber das kann man ja mit über den Stacktrace rausfinden.
SqlConnection ist ausschließlich für eine Verbindung zum MS SQL Server da. MySQL kann man damit nicht ansprechen.
Und ich stimme MrSparkle zu, was du da schreibst hört sich verwirrend an. Bitte beschreib genau wo das Problem ist und was du bisher versucht hast.