Hi srynoname,
also scheinbar vertraust Du da auf das "Makro" |DataDirectory|.
Das kenne ich zwar nicht, aber ich lese grad Quelle
"Under the hood, the value for |DataDirectory| simply comes from a property on the app domain. It is possible to change that value and override the default behavior by doing this:
AppDomain.CurrentDomain.SetData("DataDirectory", newpath)"
Dann würd ich mal hingehen, und mit ....GetData("DataDirectory") mal kontrollieren, ob das bei Dir korrekt gesetzt ist.
Also Schritt 1 sozusagen :-)
eigentlich ist das Blödsinn was ich da schreibe!
Nimmt man nämlich eine Datei und macht daraus eine Kopie mit anderem Namen, dann...... wäre das Verfahren ja nicht in der Lage, die beiden Dateien zu trennen.
Also vergeßt was ich geschrieben habe :-)
Gruß Hape
Du kannst an zwei verschiedenen Pfaden nicht erkennen, ob sie die selbe physikalische Datei beschreiben, meines Erachtens.
Deshalb würde ich TiltonJH s Idee mit dem Hashing aufgreifen, und zwei Dateien identisch sein lassen, wenn Hash und Größe übereinstimmen.
[ Vielleicht ist in Filesystemen mit symbolischen Links noch nicht einmal der Dateiname ohne Pfad ein Kriterium, aber ich bin keiner, der sich bei Linux auskennt.]
holt sich die Gesamtanzahl der Kombinationen.
Dieses Resultat kannst du dann im 2. Schritt verwenden, um den jeweils 1. Datensatz davon zu holen.
select top(1) a, b, c, from deinetabelle ...
Ich glaub man kann es mit einem Join oder mit Nesting schaffen, das in ein Statement zu packen. Hab aber grad kein Beispiel zur Hand. Sollte aber gehn.
Hi dgroeser,
Du brauchst einen BackgroundWorker (ab .NET 2.0) oder einen Thread (siehe Control.Invoke() und Control.BeginInvoke() ), der das Datenschaufeln stemmt und eine ProgressBar, die den Fortschritt anzeigt.
Gruß Hape
Du füllst ein DataSet mit Daten, und das dauert, und Du willst eine Progressbar, damit sich der User nicht langweilt, ist es das? - nur damit die Frage richtig verstanden wird.
Hallo Tom,
danke für Deine Antwort. Die Anforderung ist, dass ein Script über ein Datenbestand huschen soll, und Fehlendes ergänzen, und Altes updaten soll.
Deine Idee mit den Tabellenvariablen interessiert mich.
Die stored procedure kriege ich für eine konkrete Tabelle hin, aber wie geht das mit den Tabellenvariablen? Alle betreffenden Tabellen haben eine Spalte ID sowie eine Spalte Bezeichnung.
ALTER PROCEDURE [dbo].[ZinsberechnungFill]
(
@tabname table( ***wie geht das**** ),
@ID uniqueidentifier,
@Bezeichnung nvarchar(60)
)
AS
BEGIN
if ((select count(*) FROM [dbo].[Zinsberechnung] WHERE ID = @ID)>0)
update @tabname set Bezeichnung=@Bezeichnung where ID = @ID
else
insert into @tabname(ID, Bezeichnung) values (@ID, @Bezeichnung)
END
...
execute [dbo].[ZinsberechnungFill] @tabname='dbo.Zinsberechnung', @ID = '73d9bc97-65dd-4850-85c0-0b5bfd796105', @Bezeichnung = 'Basiszins'
GO
Hallo,
wenn ich Sätze updaten, bzw. ggf inserten muß, falls noch nicht vorhanden, behelfe ich mich mit einem etwas üppigen T-SQL Konstrukt. Die Tabelle hat 2 Spalten, ID ist PK.
T-SQL (SQL Server 2005):
if ((select count(*) FROM [dbo].[Zinsberechnung] WHERE ID = '73d9bc97-65dd-4850-85c0-0b5bfd796105')>0)
update [r1].[Zinsberechnung] set Bezeichnung='Blabla' where ID = '73d9bc97-65dd-4850-85c0-0b5bfd796105'
else
insert into [dbo].[Zinsberechnung](ID, Bezeichnung) values ('73d9bc97-65dd-4850-85c0-0b5bfd796105', 'Blabla' )
GO
Kennt jemand da eine Abkürzung?
Falls nicht, gehe ich hin und mache mir eine Stored Procedure hierfür.
Leider muß ich dann für jede Tabelle eine eigene machen, aber es ginge schon.
Falls jemand einen generellen kürzeren Mechanismus kennt, freue ich mich über eine Info.
Gruß hape
ich habe mit den typsierten Datensets, und dem Designer in VS 2005, der anscheinend "alles machen" erledigen kann, leider keine guten Erfahrungen gemacht. Obwohl es von allen Webcasts gepusht wird, ist das noch nicht ausgereift. Da reicht schon ein kleiner Bug und schon stimmt das generierte Zeugs nicht mehr und man wurschtelt nur noch in generiertem Code rum. Außerdem finde ich ein sauberes Stück Coding, aus dem genau ersichtlich ist, wie die Tabellen und Relationen aufgebaut sind, inzwischen wieder sehr schick, nachdem ich mit dem VS Designer viel Zeit verloren habe. Außerdem, wenns mal ans Refactoring geht, Datenbankänderungen im Code nachziehen -> dann geht da gar nichts mehr, außer man steigt vielleicht gleich auf Team Edition for Database Professionals auf, was einem ein verbessertes Refactoring Db-seitig verspricht. Aber da sind wir schon wieder beim: Versprechen.... *grins*
--> Untypisierte DataSets sind meines Erachtens spitze und ausgereift.
Wie _tb_ schreibt, die Reihenfolge ist das Problem.
Mach mal mit Strg-Alt-T das Dokumentgliederungsfenster auf, und verschiebe die Reihenfolge der Elemente. Wenn mit Dock, z.B. Fill, gearbeitet wird, ist die Reihenfolge für das spätere Layout ausschlaggebend. Am besten aber erst in einem kleinen Testprojekt das mal auskaspern.
Man kann mit Drag und Drop im Dokumentengliederungsfenster prima hantieren.
C:\Programme\Microsoft SQL Server\90\Tools\Publishing>sqlpubwiz script -C "Data Source=.\SQL1;Initial Catalog=AdventureWorks;Integrated Security=True" test.sql
Microsoft (R) SQL Server Database Publishing Wizard
Community Technology Preview 1 (0.1.0.0)
Copyright (c) Microsoft Corporation. All rights reserved.
Generating script for database AdventureWorks
- Including default object types in script
Error: An object or property in table DatabaseLog is currently not supported.
Das Tool ist noch taufrisch, und kann die AdventureWorks Db noch nicht korrekt exportieren, bei mir zumindest, also noch mal 4 Wochen reifen lassen :-)
schade, dass es da kein VS Bordmittel dafür gibt,
dennoch Klasse, dass da Lutz Roeder's Tool aushilft.
Svenson hat völlig recht, die Liste der implementierenden Klassen (des selben Frameworks) gehört eigentlich schon in die Doku des Interfaces... zudem sich das ja automatisch generieren ließe.
Bitmap b = new Bitmap(bruttobreite, hoehe);
Graphics g = Graphics.FromImage(b);
wenn Du mit g arbeitest, also drin rummalst, mit DrawString, etc., dann schlägt sich das auf das Bitmap b nieder. Am Ende der Malerei kannst Du also b als Ergebnis verwenden. Das Graphics Objekt g kann man einfach links liegen lassen, wird ja nicht mehr gebraucht.
ich steh auf dem Schlauch, ich weiß nicht, wie man schnellsten zu den implementierenden Klassen eines Interfaces browsen kann.
z.B. System.IFormatProvider
In Visual Studio 2005 finde ich das Interface zwar im Objectrowser, aber dort keine Infos zu den implementierenden Klassen. Mache ich dort: Alle Verweise suchen --> Es liegen keine Suchergebnisse vor.
Wie macht Ihr das, wenn Ihr zum Interface XYZ alle Implementierungen sucht?
Auf keinen Fall selbst die Zeichen rendern... da wirst Du ja nicht glücklich :-)
Nimm z.B. DrawString, um beliebigen Text mit gewünschter Schrift in ein Bitmap zu plazieren. Und das Ergebnis dann in ein Icon umwandeln. Letzteres hab ich noch nicht gemacht, aber Vorschlag hört sich vielversprechendn an (per Stream).
Gruß Hape
...
Bitmap b = new Bitmap(bruttobreite, hoehe);
Graphics g = Graphics.FromImage(b);
Font f = new Font("MeinFontName", 16, FontStyle.Regular);
g.DrawString("12345", f, brush, new PointF(10, 15));
...
ich habe eine Hand voll Fragen zu der generischen Dictionary-Klasse in System.Collections.Generic.
Ich frage mich:
1. Bleibt die Einfügereihenfolge erhalten, d.h. läuft der Enumerator in der selben Reihenfolge ab, wie die ursprünglichen Add(...) Anweisungen?
2. Falls ja - wie springt man zum letzten Element (ohne das umständliche Coding siehe unten)?
3. Falls nein - welche generische Collection sollte ich nehmen, wenn ich mit Keys drauf zugreifen möchte, und die Einfügereihenfolge erhalten bleiben soll?
4. ich kriege bei letzterEintrag.Value zu recht die Meldung "Verwendung der nicht zugewiesenen lokalen Variablen 'letzterEintrag'. Wie muß man ein struct eigentlich vorbelegen, oder wie prüft man ein solchiges, ob es leer ist? Mit struct habe ich leider noch gar nicht gearbeitet.
Danke für Eure Ideen.
Gruß Hape
Dictionary<string, DbVersion> liste = new Dictionary<string, DbVersion>()
public DbVersion getNeuesteVersion()
{
Dictionary<string, DbVersion>.Enumerator e = liste.GetEnumerator();
KeyValuePair<string, DbVersion> letzterEintrag;
while (e.MoveNext())
letzterEintrag = e.Current;
return letzterEintrag.Value;
}
Du kannst auch innerhalb eines Projektes Forms auf die beschriebene Weise be- und vererben, mußt nur vorher einen Build durchführen, und Dich dann auf die erzeugte DLL oder EXE beziehen. Das geht schon auch innerhalb!
zum Vererben von Forms gibts eigentlich eine Vorgehensweise in Visual Studio.
Die ursprüngliche Form in einem Library Projekt erstellen
In einem zweiten Projekt: Hinzufügen -> neues Element -> Geerbtes Formular,
dann den Bezug zum ursprünglichen Fenster herstellen. (das Library Projekt natürlich zur Solution hinzufügen)
Dann kannst Du im geerbten Formular Sachen hinzufügen, die im beerbten definiert sind. Und Sachen, die sich im beerbten Formular ändern, schlagen durch.
Ihr seid alle so schnell beim Antworten - echt Klasse dieses Forum!
In der Zwischenzeit habe ich das mal rausgesucht, es sieht ähnlich aus wie Eure Vorschläge, naja, das hat sich nun überschnitten. Dennoch hier mein Posting:
Gruß Hape
using System.Collections;
public static void meinTest()
{
// Alternativen zum Probieren:
//
Eigenschaft<int> testvar = new Eigenschaft<int>();
//string testvar = "blabla";
//List<String> testvar = new List<String>();
Eigenschaft<string> stringTest = new Eigenschaft<string>();
if (testvar.GetType().IsGenericType)
if (typeof(Eigenschaft<>) == testvar.GetType().GetGenericTypeDefinition())
{
Console.WriteLine("*** Es handelt sich um eine Eigenschaft<T>");
}
else
{
Console.WriteLine("*** Nein, es ist zwar generic, aber keine Eigenschaft<T>");
}
else
{
Console.WriteLine("*** Nein, es ist was ganz anderes");
}
}
da scheinbar die Notification Services nur Events innerhalb des SQL Servers auslösen, und diese dann nur über Umwege eine externe Anwendung anstoßen könnten, kommen sie für mich erst mal nicht in Betracht, so schön die Idee auch sein mag.
Vielleicht ist die SQLDependency Klasse besser geeignet, eigenständige, d.h. vom SQL Server losgelöste Anwendungen bei Datensatzänderungen zu benachrichten.