Laden...
Avatar #avatar-2534.gif
Khalid myCSharp.de - Experte
Softwareentwickler Hannover Dabei seit 19.07.2005 3.511 Beiträge
Benutzerbeschreibung

Forenbeiträge von Khalid Ingesamt 3.511 Beiträge

03.04.2014 - 14:00 Uhr

So wie ich es verstanden habe, funktioniert das dann aber nur mit WinJS. Mit Xamarin erreiche ich das Gleiche mit c#.

Möglichweise habe ich es aber auch falsch verstanden.

28.03.2014 - 08:08 Uhr

Nachtrag:
Punkt 4 hat sich wohl durch EF 6.1 erledigt. Das schaue ich mir gerade an. Das Interceptor Prinzip aus NHibernate scheint EF in ähnlicher Form übernommen zu haben.

Denke mal, so langsam holt EF auf.

21.03.2014 - 14:49 Uhr

Hallo,

der Pfad kommt daher, dass regasm die DLL in den GAC schiebt. Das ist an sich normal. Desweiteren sieht mir das ganze nach einem 32/64bit Problem aus. Kann es sein, dass dein System 32bit ist, und der Zielrechner 64bit?

Gruß
Khalid

21.03.2014 - 11:08 Uhr

Hallo,

zu deinem eigentlichen Problem kann ich nicht viel sagen, nur dass

Von einem Kollegen (IT-Admin kein Coder) habe ich erfahren, dass ab ca. 150MB Probleme beim Einlesen von Daten mit Windows Hausmitteln auftreten können.

grober Unfug ist. Ich lese hier täglich XML Daten mit bis zu 4GB! größe ein. Ohne Probleme. Und hatte auch noch nie welche.

20.03.2014 - 09:54 Uhr

Achso, diese Hybrid Dinger. Weiß nicht, was ich davon halten soll...

Danke für den Link

20.03.2014 - 08:49 Uhr

Hi herbivore,

das Konzerne gerne andere übernehmen, um diese anschließend in der Versenkung verschwinden zu lassen ist ja quasi normal, aber ich denke hier würde MS sich gehörig ins Knie schießen. Sie würden sich damit eine Technologie aneignen, die MS einen IMHO gewaltigen Sprung nach vorne bringt, was Entwicklung von Apps angeht.

@Abt:

WP8 kriegt laut Nokia einen Emulator für Android Apps

Hast du da eine Quelle? Hab ich ja noch gar nichts von gehört.

19.03.2014 - 10:44 Uhr

Oh, das wäre zu schön. Xamarin ist echt ein Knaller. habe damit fürs iPad eine Anbindung an eine bestehende .NET Reporting Anwendung geschrieben. Das ging so locker und flockig von der Hand. Vorher hatte ich es mit Objective-C probiert. Da wär ich heute noch nicht mit fertig 😃

Am 27.03. gibt es ja eine große Pressekonferenz. Soll zwar Office fürs iPad gezeigt werden (angeblich), aber das wäre mir ehrlich gesagt lieber...

11.03.2014 - 12:53 Uhr

Hi,

ok, dann werde ich es wohl doch mit einem Bindinghandler lösen. Auch wenn es mir irgendwie unsauber vorkommt.

Das "{ "decimalValue" : "123,45" }" kommt von Knockout (ko.ToJSON). Scheinbar erkennt Knockout den unterliegenden Datentyp nicht. Knockout schmeißt alles in Strings, so wie ich es bis jetzt gesehen habe. Möglichweise mach ich auch was falsch.

Danke & Gruß
Khalid

11.03.2014 - 09:55 Uhr

Hi,

ich verzweifle hier gerade 😃
Also, ich hab ein ganz simples Knockout ViewModel


function ViewModel() {
  var self = this;
  self.decimalValue = ko.observable(123.45);
  

  self.post = function() {
    $.ajax({
      type: "POST",
      url: "/api/test",
      contentType: 'application/json',
      data: ko.toJSON(self)
    });
  };
}

Dazu ein noch simpleres Model


public class TestModel
{
  public decimal DecimalValue { get; set; }
}

Und den passenden WebApi Controller


[Route("test")]
[HttpPost]
public HttpResponseMessage Test(TestModel test)
{
  return Request.CreateResponse(HttpStatusCode.OK, test);
}

In der web.config habe ich die Culture auf de-DE gesetzt. Ich persönlich hätte jetzt erwartet, wenn ich in einem input Element


<input type="text" data-bind="value: decimalValue" />

"1,23" eingebe, dass beim Server auch "1.23" ankommt, und nicht "123". Das JSON was über die Leitung fliegt sieht auch "gut" aus


{"decimalValue":"123,45"}

Ich verstehe ehrlich gesagt nicht, wie ich den JsonSerializer dazu bringe, dass er gefälligst die eingestellte Culture in der web.config benutzt und nicht scheinbar die invariante.

Für Denkänstöße bin ich sehr dankbar, denn ich schlage mich damit schon jetzt etrwas länger rum und finde irgendwie dazu keine passenden Antworten. Außer z.B. in Knockout ein eigenen Bindinghandler zu schreiben der "," gegen "." ersetzt. Das halte ich aber für schwachsinn.

Gruß
Khalid

10.03.2014 - 08:36 Uhr

Hallo,

ich beziehe mich immer auf die Style Guidelines der jeweiligen Sprache. Soll heißen unter c#


public void Bla() 
{

}

unter JavaScript


function Bla() {
}

Es ist reine Gewöhnungssache. Wenn ich jemanden JavaScript vorschmeiße, der nie oder selten mit JS arbeitet, wird es schwerer haben zu lesen, wie jemand der täglich mit JS arbeitet. Genauso umgekehrt mit c# oder was weiß ich.

Ansonsten kann ich mich nur Abt und Peter Bucher anschließen.

04.03.2014 - 11:13 Uhr

Für sowas gibt es Gruppenrichtlinien.

03.03.2014 - 16:19 Uhr

Hallo,

rauchst du? Wenn ja, lass dir mal die Hauptschlagadern am Hals "ultraschallen". War bei einem Bekannten der Fall. Zu geringe Durchblutung.

Aber: Geh zum Arzt!! Mit plötzlich auftretenden Schwindel ist nicht zu spaßen.

Gruß
Khalid

03.03.2014 - 14:14 Uhr

Nimm nicht mySql. Nimm lieber SQLite oder SQL Server Express. Wobei bei der kleinen Anwendung würde ich es erstmal bei SQLite bleiben. malignate hat dass meiste ja schon geschrieben, was das Design/Naming angeht. Wenn du ein wenig weiter in die Normalisierung gehst, ist das Geschelcht eines Schülers nur eine ID auf eine weitere Stammdaten-Tabelle.

Ich denke nich dass die bezeichnung eines geschlechts 45 Buchstaben lang sein wird 😃.

Wenns nach Facebook geht, könnten 45 Zeichen teilweise knapp werden 😃

26.02.2014 - 10:18 Uhr

Hi,

die Fakes/Shim/Mock Variante ist mir auch schon durch den Kopf gegangen. Aber habe ich sofort verworfen, weil ich im Hinterkopf "du kannst doch kein Unit-Test Code für Produktiv verwenden" Gedanken hatte. Das kommt mir irgendwie "gefuscht" vor, auch wenn es funktionieren könnte.

@Abt:

Meine Idee war dabei einen Context zu verwenden, ähnlich wie die Impersonation-Variante.

Klingt interessant. Wenn du das was hast, gib mal bitte bescheid.

@herbivore:
Die Idee mit der Ramdisk ist gut. Auf solch doch recht einfachen Dinge komme ich irgendwie nie. Werde ich aber wohl erstmal temporär einsetzen.

Danke
Khalid

26.02.2014 - 08:49 Uhr

Hallo,

mir schwirrt schon länger folgende Frage durch den Kopf:
Ich habe ein Server der Workflows über die WF ausführt. Einige Workflows hantieren mit temporären Dateien rum. Z.B. Datei vom FTP runterladen, in Bla transformieren und hinterher wieder irgendwo hinschieben. Derjenige der die Workflows erstellt ist eigentlich dafür verantwortlich die temporären Dateien wieder zu entfernen. Ebenfalls passiert dies auch alles in einem dafür vorgesehenen Ordner.

In der Defintion der Workflows wird eigentlich immer mit System.IO.x gearbeitet. Nun müsste man ja quasi z.B. File.WriteAllText "umleiten", was aber wahrscheinlich schwierig bis unmöglich wird. Andere Idee ist einen eigenen Namespace für sämtliche IO Operationen bereitzustellen, der dann z.B. in einem IsolatedStorage arbeitet. Hier ist dann nur das Problem, dass a) sämtliche Workflows umgebaut werden müssen und b) trotzdem fröhlich der System.IO Namespace weiter genutzt werden kann.

Meine Frage dazu: Gibt es eine Möglichkeit, dass jeder gestartete Workflow Thread sein eigenes "Dateisystem" bekommt, welches nach dem beenden autom. wieder alles entfernt? Momentan entstehen sehr viele Dateileichen und Ordner. Gerade bei Workflows mit z.B. stündlicher Verarbeitung kann das sehr nervig sein.

Eine Art Umleitung der System.IO Operation wäre natürlich ein Traum, aber meines wissens nach nicht möglich 😃

Gruß
Khalid

24.02.2014 - 08:07 Uhr

Hallo,

@Abt:
Ich werde das jetzt so in der Art lösen. Ist erstmal nicht so schön, aber sollte funktionieren.

@malignate:
Das sieht doch schonmal ganz gut aus. Denke das hilft mir weiter. Danke.

Gruß
Khalid

22.02.2014 - 18:43 Uhr

Hi Abt,

danke für die Antwort. Ich muss mal schauen, wie ich Punkt 3 löse.

Dadurch das NHibernate etwas augestorben erscheint (die Haupt-Contributor sind alle weg), muss ich mich langsam um Alternativen bemühen 😃

Gruß
Khalid

22.02.2014 - 18:39 Uhr

Hallo,

ich würde da etwas anders rangehen. Die Tabelle im eine weitere Spalte "Verarbeitet" erweitern. Davon muss das erste Programm ja nichts wissen (Default auf false). Den weiteren Dienst würde ich dann mit Quartz.Net ausrüsten und einen Cron Job anlegen der halt alle x Sekunden/Minuten/Stunden einen Task startet. Dieser schnappt sich alle die nicht verarbeitet sind und geht diese durch.

Andere Möglichkeit, wobei diese erfordert das das erste Programm geändert werden kann: Das erste Programm schickt den Dienst einfach ein Notify, wenn was eingefügt wurde. Hier könnet man zum Beispiel MSMQ nehmen, oder ein simpler http POST.

So mach ich es immer, wenn ich auf solche Anforderungen stoße.

Gruß
Khalid

21.02.2014 - 12:02 Uhr

verwendetes Datenbanksystem: EF

Hallo,

ich habe mal angefangen mich mehr mit dem EF zu beschäftigen. Dabei sind mir ein paar Dinge aufgefallen, die ich hier ganz gerne mal ansprechen würde. Gleich vorweg: Ja, ich könnte auch alle Punkte bei Google suchen, aber ich weiß das hier einige mit dem EF arbeiten und eilig habe ich es auch nicht. Und die Antworten hier sind teils wesentlich besser als im Web.

Ich nutze übrigens nur Code First mit der Fluent API, so wie ich es auch aus NHibernate gewohnt bin.

So, genug geschwafelt, hier meine Fragen:

  1. Im DbContext überschreibt man ja OnModelCreating um die Mappings hinzuzufügen. Gibt es ähnlich wie bei NH die Möglichkeit die Mappings pro Klasse auszulagern? Also Entity1 mit Mappingklasse Entity1Mapping? Und ich meine jetzt einen Build-In Mechanismus. Natürlich kann ich mir selber ein Konstrukt bauen. Nur wenn, würde ich gerne vorhandene Mittel nutzen.

  2. Ich hab leider bei keinen Tutorial gesehen (oder übersehen), ob man Klassen als Komponenten mappen kann. Sprich, ich habe eine Klasse "Address" die mehrmals in der Klasse "Person" vorkommt. Ich meine gelesen zu haben, dass das dem ModelBuilder.Complex<T> entspricht. Wenn ja, einfach zum nächsten Punkt 😃


public class Address
{
  public string ZipCode { get; set ; }
  public string City { get; set; }
}

public class Person
{
  public Address HomeAddress { get; set; }
  public Address AdditionalAddress { get; set; }
}

In der entsprechenden Tabelle möchte ich jetzt für "Person" nur 4 Spalten haben nach dem Motto "HomeZipCode", "HomeCity" und "AdditionalZipCode" usw...

  1. Bei dieser Frage weiß ich quasi schon, dass es in EF wohl nicht geht, aber vielleicht gibt es ja eine Möglichkeit. Also, ich habe ein eigenes Struct für Entgelder mit Währung. Im Prinzip nichts weiter als ein Double mit nem Währungsstring. Dieses eine Struct möchte ich aber in 1 Spalte in der Datenbank haben.
    Also

public struct Fee
{
  public double Value { get; set; }
  public string Currency { get; set; }
}

public class Something
{
  public Fee Value { get; set; } 
}

Der Wert in der entsprechenden Spalte in der Tabelle sieht z.B. so aus "EUR100.90" oder "GBP1023.75". Und kommt jetzt bitte nicht auf die Idee zu fragen warum 😃. In NHibernate kann ich Serializer für einzelne Spalten hinterlegen, geht sowas auch bei EF? Der Vorteil ist, dass ich mich nirgendwo drum kümmern muss, sondern zentral in der NH konfiguration liegt. Das ggf. ins Repository zu verschieben finde ich suboptimal.

  1. Kann ich mich in die einzelnen Prozesse von EF einklinken, sprich bevor etwas aus der Db geladen wird, bzw. bevor etwas reingeht? Z.B. haben alle meine Entities ein ModifiedBy und ModifiedOn. Das möchte ich zentral an einer Stelle setzen. Was das Rauslesen angeht ebenfalls. Es gibt pro Entity ein SecurityDescriptor, der AD Berechtigungen in ein Byte-Array verwaltet. Beim Auslesen aus der Bank sollen sofort die Berechtigungen geprüft werden. D.h. wenn jemand etwas selektiert, worauf er keine Rechte hat, dann soll der Satz quasi "entfernt" werden und erst gar nicht in der Ergebnismenge auftauchen (bzw. im Repository ankommen).

Auf Punkt 1 und 2 kann ich ggf. verzichten, aber der 3. Punkt wäre schon wichtig. Punkt 4 könnte ich ins zentrale Repository verschieben, wobei mir die Stelle nicht "nah" und "zentral" genug ist (aber das hat seine Gründe).

Auf Antworten würde ich mich freuen

Gruß
Khalid

17.02.2014 - 09:17 Uhr

Hallo,

du kannst in NHibernate Dictionaries mappen. D.h. du legst dir in eine Config ab, was es an zusätzlichen Spalten gibt, und diese berücksichtigst du wiederum im Mapping (Vorrausgesetzt du nutzt ClassMapping<T>). Bei HBM Mapping wird es wesentlich schwieriger.

Und das Ganze wie unconnected geschrieben hat, in eine separate Tabelle legen.

06.02.2014 - 17:21 Uhr

Beantwortet nicht meine Frage. Sind die Clients immer im Netz, oder können diese auch offline arbeiten?

Wenn nein, sprich immer im Netz, dann stimme ich ProGamer zu. Schaue dir (bevor du dich für eine Datenbank entscheidest) an, was Datenbanken eigentlich machen, sind. Ich glaube, die fehlt da das Verständnis für.

06.02.2014 - 13:45 Uhr

Hi,

was ist denn deine genaue Anforderung?
Soll jeder Client eine eigene Datenbank haben, die dann mit den anderen Clients synchronisiert wird? Wobei das nur Sinn macht, wenn die Clients "disconnected" arbeiten, sprich komplett ohne Netz sind.
Willst du einfach nur instant in den anderen Clients sehen, wenn ein anderer Client Daten manipuliert/hinzufügt/etc.?

Sonst artet das hier in Glaskugelleserei aus...

24.01.2014 - 14:18 Uhr

Wenn ein Fehler geworfen wurde, und ich das mit bekomme (zB hier nonzero) kann ich einfach ein Win32Exception-Objekt erstellen. Dies ist anschließend komplett mit allen Infos aus GetLastError gefüllt; das verwende ich bei allen Arbeiten mit PInvoke.

Stimmt, das ist mir aber zu unperformant, da neben GetLastError auch FormatMessage aufgerufen wird. Bei extrem vielen Operationen auf Win32 Seite ist das spürbar (z.B. Dateisystem).

24.01.2014 - 13:27 Uhr

Hi,

GetLastError in .NET benutzt man an sich eh nur, wenn man mit P/Invokes arbeitet die einfach nur ein HResult zurückgeben. Wenn du halt nur mit .NET Mitteln arbeitest, hast du ja die Win32Exception.

Zu deiner eigentlichen Frage:
Nein, gibt es nicht 😃
Bei jeder neuen Version, sei es von Win7 auf 8, oder ein Service Pack, oder sogar nur ein üblicher Windows Patch, können einfach neue Error Codes hinzukommen. Dir bleibt nichts anderes übrig, die "wahrscheinlichsten" abzufangen.

22.01.2014 - 17:10 Uhr

Was heißt klappt nicht?

Beispiel


var connection = new SQLiteConnection("Data Source=:memory:;Version=3;New=True;");
connection.Open();

new SQLiteCommand("CREATE TABLE Test (col DECIMAL(10,2))", connection).ExecuteNonQuery();
new SQLiteCommand("INSERT INTO Test (col) VALUES (1)", connection).ExecuteNonQuery();
new SQLiteCommand("INSERT INTO Test (col) VALUES (2)", connection).ExecuteNonQuery();
new SQLiteCommand("INSERT INTO Test (col) VALUES (3)", connection).ExecuteNonQuery();

var result1 = new SQLiteCommand("SELECT SUM(col) FROM Test", connection).ExecuteScalar();
Console.WriteLine("{0} = {1}", result1.GetType().Name, result1);

new SQLiteCommand("DELETE FROM Test", connection).ExecuteNonQuery();

new SQLiteCommand("INSERT INTO Test (col) VALUES (1.5)", connection).ExecuteNonQuery();
new SQLiteCommand("INSERT INTO Test (col) VALUES (2.5)", connection).ExecuteNonQuery();
new SQLiteCommand("INSERT INTO Test (col) VALUES (3.5)", connection).ExecuteNonQuery();

var result2 = new SQLiteCommand("SELECT SUM(col) FROM Test", connection).ExecuteScalar();
Console.WriteLine("{0} = {1}", result2.GetType().Name, result2);

Ausgabe:


6 = Int64
7.5 = Double

Will dir ja nicht zu nahe treten, aber du solltest unbedingt an den Grundlagen zu Datenbanken und Datentypen arbeiten.

22.01.2014 - 11:36 Uhr

Hallo,

so schwer isses doch gar net 😃

Ein SUM aus 1,2,3 = 6 = Int64
Ein SUM aus 1,2.5,3 = 6.5 = Double

Gruß
Khalid

[Edit]: SQLite entscheidet sich beim Übertragen scheinbar für den "günstigeren" Datentyp. Aber das ist nur eine reine Vermutung von mir.
[Edit2]: Scheinbar bringt dein SUM exakt ein ganzzahligen Wert raus.

22.01.2014 - 08:40 Uhr

Hi,

IIS Logs (gerade die sehr großen) lassen sich wunderbar mit dem MS Log Parser durchsuchen. Gut, es ist nichts mit UI da es ein cmd Tool ist, aber was schnelleres kenne ich nicht. Man kann allerdings den Log Parser mit eigenen Plugins erweitern (über COM) und z.B. nur die Ausgabe als HTML rausrendern.

Es gibt auf CodePlex meine ich ein Projekt zu dem Log Parser. Meine sogar das heißt Visual Log Parser. Musst du mal gucken.

Gruß
Khalid

20.01.2014 - 13:17 Uhr

Hallo,

@Sebastion: Ja, ich meinte das CDC. Das ist halt nur in der Enterprise drin.

Wenn du CDC nutzt und jemand hat keine Enterprise, so bekommt derjenige erstmal kein Fehler. Erst wenn du Prozeduren, Funktionenn nutzt, die auf diese Daten zugreifen. Dann knallt das natürlich weg.

Für den Weg ohne Enterprise Edition gibt es mehrere Möglichkeiten. Die meisten Varianten zielen auf Trigger ab (würde ich wenn auch empfehlen). Du baust dir Trigger für Delete, Update und Insert und verschiebst die Daten in eine separate Tabelle, oder in die eigene (hängt von der Anforderung ab). Ich selbe setze sowas mit XML um. Das heißt, die Changes aus den Triggern packe ich in eine separate Tabelle in XML Form. Was den Vorteil hat, dass die Daten auch nach Änderung des Schemas die "alten" beliben. Ist allerdings von der Performance her doch ziemlich langsam. Wenn deine Anforderung ist, dass man permanent auf die Historie zugreifen muss, würde ich die Daten so ablegen und nicht über XML. Aber dazu gibt es genug Infos an sich im Netz.

Gruß
Khalid

20.01.2014 - 11:12 Uhr

Hallo,

Change Tracking ist erst in der Enterprise Edition enthalten. Wenn ihr also an der Schule kein Developer oder Enterprise verwendet, wird das nicht funktionieren.

Gruß
Khalid

10.01.2014 - 15:39 Uhr

Es gibt doch unter dem Foren-Namen die Kurzbeschreibung

System.Windows.Controls-Namespace, WPF-Databinding, Windows Presentation Foundation, Silverlight (WPF/E), XAML, Surface, ...

Da Silverlight ja so gut wie tot ist*, könnte man doch einfach den Part "Silverlight (WPF/E)" entfernen und gegen "WinRT (XAML)" ersetzen. Oder auch hinzufügen. Fertig.

Ein weiteres Forum macht meines erachtens auch kein Sinn.

*Gefühlt seit 1 Jahr keine neue Frage dazu

10.01.2014 - 15:27 Uhr

Hallo,

sobald du performant auf das Dateisystem zugreifen willst, würde ich alle .NET Klassen schnell vergessen 😃. Wie Abt bereits geschrieben hatte, setzt .NET teilweise einfach zu viele (und auch unnötige) Shell Befehle ab.

Die Shell basiert auf ein COM Objekt Modell. Du kannst also jederzeit dir die passenden COM Interfaces ziehen und direkt mit den Interfaces arbeiten. Ausgangspunkt ist eigentlich immer das IShellFolder Interface. Und mit der Methode EnumObject die das Interface bereit stellt, kann man verdammt schnell über Verzeichnisse iterieren. Es mag zwar auf den ersten Blick unperformant aussehen, da man mit vielen Pointern um sich wirft, aber das täuchst.

Speziell für dein Problem müsste eigentlich die Funktion SHGetFileInfo ausreichen. Da unter Windows die Dateien Case-Insensitive sind, müsste es reichen der Funktion die Datei "HALLO.TXT" zu zuschmeißen und im Ergebniss sollte unter szDisplayName dann eigentlich "HaLlO.tXt" stehen.

08.01.2014 - 11:40 Uhr

Hallo,

dazu kann ich dir die folgenden Artikel empfehlen:
Dragging Elements in a Canvas
WPF Diagram Designer: Part 1 (bis Part 4)

Gruß
Khalid

07.01.2014 - 13:45 Uhr

Hallo,

bitte WinForms nicht mit WF abkürzen. WF ist offiziell für Workflow Foundation. Verwirrt ein wenig.

Du musst in deinem eigenen Control die Click Events der einzelnen Buttons abonnieren und einfach nach außen weitergeben.

Hier [FAQ] Eigenen Event definieren / Information zu Events (Ereignis/Ereignisse) gibt es weitere sehr gute Infos zu dem Thema.

03.01.2014 - 10:56 Uhr

Hallo,

sollte doch eigentlich reichen den margin im TreeViewItemTemplate zu ändern. Eine Property wie unter WinForms gibt es nicht.

Gruß
Khalid

22.12.2013 - 15:17 Uhr

Im c++ Teil kannst du natürlich nicht einfach auf die in der c# Anwendung enthaltenen Variablen zugreifen. Du hast 2 Möglichkeiten:
a) In der Signatur der Methode übergibst du die Variablen per Reference an die c++ Dll. Diese kann die Variablen dann ändern.
b) Auf beiden Seiten definierst du ein Struct mit den passenden Variablen. Die c++ Funktion nimmt da "Input"-Struct entgegen und liefert ein geändertes Struct wieder zurück.

Ich würde Weg b) nehmen, da dieser einfacher erweiterbar ist.

Gruß
Khalid

20.12.2013 - 13:03 Uhr

Die Signaturen sind falsch. Write liefert ein bool zurück und kein long. Bei Get ist size nicht int, sondern uint.

Also so


[DllImport("kernel32.dll", CharSet=CharSet.Unicode, SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool WritePrivateProfileString(
  string lpAppName,
  string lpKeyName, 
  string lpString, 
  string lpFileName);

[DllImport("kernel32.dll", CharSet=CharSet.Unicode)]
static extern uint GetPrivateProfileString(
  string lpAppName, 
  string lpKeyName,
  string lpDefault, 
  StringBuilder lpReturnedString, 
  uint nSize,
  string lpFileName);

Edit: Aber wie Abt schon erwähnt hat, such dir eine reine .NET Library für sowas.

20.12.2013 - 12:14 Uhr

Schwierig bis unmöglich zu sagen, woran das liegt. Am besten mit WinDbg starten und die genaue Exception auslesen.

Meine Vermutung dazu ist, dass du PInvokes hast und du ein mögliches 32/64 Bit Problem hast. Sprich du ruft eine Funktion in der Kernel32 auf, die dann abraucht, da die Signatur nicht korrekt ist.

20.12.2013 - 08:25 Uhr

SQL Profiler zwischen schalten bei beiden Varianten und sich die Unterschiede anzeigen lassen. Dazu mindestens IO, CPU und ausgeführte Zeit mit anzeigen lassen.

Ggf. auf der ADO.NET Seite den Execution Plan abrufen und mit dem aus dem SSMS vergleichen.

Und SQL Server kürzt man nicht SQLS ab. Da musste ich zwei mal lesen, bevor ich wusste was du meintest 😃

Edit: Benutzt du Prepared Statements auf beiden Seiten?

19.12.2013 - 13:01 Uhr

Hallo,

bin mir jetzt nicht 100%ig sicher, aber ich meine mit MSBuild kann man angeben mit welcher CLR Version kompiliert werden soll.

19.12.2013 - 09:16 Uhr

Ich hab mein leben lang mit MSSQL gearbeitet und würde prinzipiell immer wieder zu MSSQL tendieren. In letzter Zeit arbeite ich auch mit Oracle und würde immer wieder zu MSSQL tendieren 😃

Also beide Systeme haben ihre Vor- und Nachteile. Wie schon erwähnt, ist der MSSQL Express für die meisten kleinen Systeme vollkommen ausreichend. In deiner Auflistung Jimmakos82 ist bei MSSQL ein Negativpunkt die Lizenzkosten!? Also bitte, konfiguriere mal ein Oracle Enterprise mit Tuning Advisor, Fremd DB Listener, Replikation usw... Für den Betrag kauf ich mir mehrere MSSQL Enterprise Lizenzen und das einmalig und nicht pro Jahr. Wenn Oracle nicht langsam ihr Lizenzmodell ändert, haben die bald keine Kunden mehr. Das Oracle so verbreitet ist, hat allein historische Gründe und immer mehr Firmen wenden sich von Oracle ab. Und das nicht nur im DBMS Bereich.

Auch der Punkt, dass Oracle mehr im Enterprise Bereich unterwegs ist und ja größere Datenmengen "beherrscht" ist ein weit verbreiteter Irrglaube. Habe schon Datenbanken in MSSQL mit mehreren TB verwaltet. Geht alles. Alleine das Datenbankschema zählt. Passt das nicht, muss man sich nicht wundern, wenn man Performance Probleme hat.

Aber wie gesagt, Oracle hat auch interessante Vorteile, wie z.B. Materialized Views, oder alleine das Package System. PL/SQL ist auch ehrlich gesesagt dem TSQL um längen vorraus (IMHO). Das Backup und Recovery finde ich bei Oracle besser gelöst als bei MSSQL, aber das kommt auch nur zum Tragen, wenn man hier von großen Mengen spricht. Zudem kann Oracle auch unter Linux betrieben werden, was bei Großkunden gut ankommt.

Desweiteren muss ich Coder007 etwas wiedersprechen 😃. Datenunabhängigkeit ist natürlich was gutes, und man sollte dies ggf. bei der Entwicklung in Betracht ziehen. Nur kenne ich persönlich nicht ein Produkt, welches dies wirklich durchzieht. Heutzutage entscheiden Controller und Gremien welche Software für ein Unternehmen gekauft wird (ich gehe hier jetzt mal von Investitionen in ≥ 6 Stellig ein). Sobald da ein Produkt kommt, mit "Ich kann mit jeder DB" ist dies meist sofort raus, weil das Denken herrscht "Oh, dann ist das darauf ja nicht spezialisiert". Weil die Entscheider nicht die Technik kennen, den interessieren die Funktion und was es kostet (alles schon erlebt). Und wenn man die Leute mit der Software überzeugt hat, ist das Geld für ein ggf. anderes DBMS auch meist da. Und spätestens, wenn man bei einer Entwicklung an DBMS spezifische Fearures ran geht (z.B. FILESTREAM im MSSQL) ist man eh raus aus der Nummer. Ich würde auf Datenbankunabhängigkeit verzichten.

Von der administration her nehmen sich ehrlich gesagt beide nichts. Man kann bei beiden System was "kaputt" machen, wenn man was verkonfiguriert. Das ist kein Argument. Man muss schon das System kennen auf dem man arbeitet, sonst nützt es nichts.

Was mich mal interessieren würde Jimmakos82, was du denn von der DB erwartest? Ich kenne soviel Produkte, die MSSQL oder Oracle nutzen, aber deren Features gerade mal zu 10% ausnutzen. Viel Datenvolumen sagt ja nichts aus. Brauchst du Hochverfügbarkeit? Brauchst du 100%ige Sicherheit vor Datenausfälle? Und die alles entscheidenden Fragen sind, mit wie viel Transaktionen pro Sekunde rechnest du? Wieviel IO pro Sekunde? Denn da gibt es wirklich unterschiede zwischen MSSQL und Oracle.

18.12.2013 - 17:23 Uhr

witte hat es ja schon gepostet. Wenn du SQL 2012 verwendest, dann nimm Sequences. Die Dinger sind ACID.

13.12.2013 - 08:26 Uhr

Hi,

natürlich kannst du using verwenden und solltest du auch. Der Link zeigt auf ein vollkommen anderes Problem, nämlich SELECT + 1.

Gruß
Khalid

12.12.2013 - 16:18 Uhr

Oh. Sorry, das habe ich jetzt so nicht gewusst.

Aber was gehen sollte wäre ein IValueConverter, der dann an das ItemsSource des Templates gebunden wird. Der ValueConverter gibt dann eine CompositeCollection zurück. Aber dann bist du wieder raus aus Xaml.

12.12.2013 - 15:22 Uhr

Den Hinweis auf die CompositeCollection bist du scheinbar auch noch nicht gefolgt. Denn genau mit dem Ding kannst du im Xaml statische Elemente erzeugen und mit dynamischen Listen verknütten. Ob jetzt Liste, oder Tree ist total egal, ist eh alles das Gleiche...

11.12.2013 - 15:17 Uhr

Hallo,

die einfachste Möglichkeit müsste ein Canvas mit einem Hintergrund sein. Der Hintergrund ist dann natürlich dein entsprechendes Bild. Alle weiteren Elemente kommen dann einfach auf den Canvas drauf.

11.12.2013 - 13:21 Uhr

Wenn du mit Linq2Sql arbeitest (ist übrigens obsolete, nimm das Entity Framework, oder NHibernate, oder halt pur ADO.NET), müsstest du eh Entities haben die du direkt per Linq2Sql in die Datenbank ballern kannst.

Aber das geht jetzt definitiv in Richtung [Hinweis] Wie poste ich richtig? Punkt 1.1. Wenn du Linq2Sql weiter verwenden willst, dann schau dir bitte dazu weiterführende Dokumentationen an (MSDN, Google, etc...)

11.12.2013 - 13:15 Uhr

Das int in der AddEmployee Methode gibt einfach nur die Anzahl der betroffenen Zeilen zurück, also das ExecuteNonQuery (steht aber in der MSDN).

ich habe etwa 150 Textboxen, muss ich alle in den Übergabeparametern der Methode aufzählen?

Ja 😃
Aber das durchlaufen der Controls ist ein guter Hinweis. Wobei hier natürlich noch die Trennung der UI und der Daten bedacht werden sollte.

@Gnozo: Dein geposteter Code Ausschnitt zeigt, dass du ebenfalls den Artikel nicht gelesen hast. Denn genau so macht man es nicht.

11.12.2013 - 11:01 Uhr

Auch hier kann ich nur wieder auf den Link verweisen im 2. Abschnitt "Vorteile der Parameter-Lösung in der Praxis". Wenn du das durchgehst, bekommst du das schon selber hin.

11.12.2013 - 10:38 Uhr

Klarer Fall von [Artikelserie] SQL: Parameter von Befehlen

Hat übrigens FZelle auch schon gepostet. Scheinbar hast du dir den Link nicht angeschaut.

11.12.2013 - 07:55 Uhr

Schau dir mal die CompositeCollections an. Sowas geht in Xaml, aber der bessere Weg ist es, über das ViewModel die zusätzlichen Nodes anzuhängen.