Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von CarstenP
Thema: Select Abfrage Performance
Am im Forum: Datentechnologien

Zitat
Original von FZelle
Wofür sind wohl so dinger wie der SQL-Server, Oracle, DB2 o.ä. entsanden?
Hm, dafür, dass sich manche Unternehmen die **** ihrer Eigner vergolden lassen wollen? Man nehme MySQL, optimiere den Server bis zum Anschlag, schreibe sauberen Code, umgehe alles, was MySQL ausbremst, weil die Entwickler keinen Bock drauf haben, sinnloses Zeug zu optimieren (zB "inner joins") und fahre einen Benchmark gegen Oracle, mySAP, DB2 & Co...

Thema: "Patterns & Practises" - Zur Nomenklatur von Datenbanken, Tabellen und Feldern
Am im Forum: Datentechnologien

Stimmt, ich bin mehr für das O² zu haben, also OODBMS Noch mehr wäre ich für ein "Entity-oriented DBMS" zu gewinnen, aber was soll's, man kann nicht alles haben

Thema: Schon wieder PropertyGrid
Am im Forum: GUI: Windows-Forms

was -- zum teufel! -- treibst du da??

Thema: Geschichte von Programiersprachen, OS
Am im Forum: Smalltalk

Zitat
Original von Code-Hacker
Allerdings muss man damit wohl ziemlich vorsichtig umgehen, da die einzig und allein auf Performance programmiert wurde und absolut nicht auf Sicherheit.
Tja, wären Programmierer keine Menschen, könnte man das zum Prinzip erkären

Thema: Was hören .net Programmierer?
Am im Forum: Smalltalk

So, dann oute ich mich, obgleich in Berlin wohnend, als absoluter "Ärzte"-Hasser. Farin hat ne Stimme, die mich nur aufs Klo treibt wie sonst nach extremer Überdosis Alkohol, und Bela vergreift sich, auch wenn er ne gute Stimme hat, an heiligen Klassikern weit über seinem Niveau. Punk(t) ;-)

Thema: Was hören .net Programmierer?
Am im Forum: Smalltalk

Zitat
Original von Chief Brodie
Zitat
Original von CarstenPWie findeste "Athena"?

ist, glaub ich, die einzige türkische band, die ich kenne...
habe ich auf nem konzi gesehen - irgendwo habe ich auch n paar songs von denen.
live waren sie ganz cool - studio hat mir ein bisschen zu wenig drive, wenn du weisst, was ich meine...
Ja, ich war beim Grand-Prix auch total verblüfft über die Jungs, die sind da abgegangen wie Clash zu den besten Zeiten. Und ich hab später noch ein paar Konz-Videos gesehen, da waren sie noch besser. Vom Sound her mag man gar nicht glauben, wie die schräg sein können. Echt kultig

Thema: Geschichte von Programiersprachen, OS
Am im Forum: Smalltalk

Fortran kommt nicht umsonst von "formula translator". Es gibt kaum eine effizientere Programmiersprache für mathematische und Mathe-basierte Probleme. Das, was Fortran in Sachen "number crunching" mitbringt, müsste man in C(++/#) höchst umständlich erstmal zusammenfrickeln. Manche Mathe-Libs, gerade für C++, sind zwar schon ziemlich weit entwickelt, aber gerade in Sachen Vektoren, Matritzen ist Fortran grandios. Wäre klasse, wenn man Fortran-Libs in C# nutzen könnte

Thema: "Patterns & Practises" - Zur Nomenklatur von Datenbanken, Tabellen und Feldern
Am im Forum: Datentechnologien

Ja, wie gesagt, es ist eben Geschmacksache. Ich benutze JOINs nur dann, wenn es gar nicht mehr anders geht (und es geht sehr oft ohne). *-Abfragen habe ich öfter dann, wenn es drum geht, Basisdaten zu ändern, also zB ne Adresse. Da werde ich, weil ich 2 von 12 Feldern nicht brauche, die beiden Felder nicht weglassen. Bisschen faul bin ich dann doch

Thema: "Patterns & Practises" - Zur Nomenklatur von Datenbanken, Tabellen und Feldern
Am im Forum: Datentechnologien

Hm, Du findest also

SELECT Persons.ID AS PersonID, Persons.FirstName, Persons.LastName, Persons.Birthdate, ..., Addresses.ID AS AddressID, Addresses.Street, Addresses.City, Addresses.ZIP, ... FROM [...] WHERE [...]

lesbarer als

SELECT Persons.*, Addresses.* FROM [...] WHERE [...]

? Okay...

Ist aber wie immer Geschmacksache, wie man das handhabt. Ich halte mich ja auch nicht an alle Patterns & Practises, die irgendwo durchs Netz spuken. Wenn man Regeln kennt und verstanden hat, darf man sie natürlich brechen

Thema: Editor im PropertyGrid
Am im Forum: GUI: Windows-Forms

Schau Dir mal die Klasse System.Drawing.Design.UITypeEditor an, da findest Du, was Du brauchst.

Thema: "Patterns & Practises" - Zur Nomenklatur von Datenbanken, Tabellen und Feldern
Am im Forum: Datentechnologien

Ich widerspreche dem Widerspruch nur ungerne, aber dennoch begründet.

Das vorgestellte Schema ist nicht speziell auf C#/.NET zugeschnitten, sondern soll möglichst allgemeingültig sein (und findet nur bei älteren DBs seine Grenzen, wenn diese DBs Tabellen- und Feldnamen auf x Zeichen begrenzen, wie etwa dBase III).

Beispiel: MySQL + PHP:

$sql = "SELECT Persons.*, Addresses.* FROM Persons, Adresses
        WHERE Person.AddressPID = Address.ID";
$result = mysql_query($sql, $conn);
$row = mysql_fetch_row($result);
Dieser Code würde "unexpected results" liefern, da die MySQL-Abfrage-Engine die Feldnamen nicht qualifiziert. Wenn man auf $row nun nicht per numerischem Index, sondern über den Feldnamen zugreift, rauscht's, denn es gibt zwei Felder, die "ID" heißen. Was also ist denn nun $res["ID"]? Die Person-ID oder die Address-ID?

Thema: Was hören .net Programmierer?
Am im Forum: Smalltalk

Zitat
Original von Chief Brodie
P U N K R O C K ! ! !
Wie findeste "Athena"?

Thema: Primärschlüssel erstellen
Am im Forum: Datentechnologien

Stored procedures sind aber wieder DB-abhängig und damit nur in sehr engen Grenzen portierbar, wenn man die DB-Engine wechselt. Ist aber wie immer Geschmacksache, und 20 Dinge sprechen dafür, Programmlogik in die DB zu schieben (Speed vor allem), und 20 Dinge dagegen. Ich halte es so, dass ich die DB möglichst wenig mit Logik fülle (nichtmal Constraints), sondern so gut wie alles in den Code packe.

Thema: Was hören .net Programmierer?
Am im Forum: Smalltalk

Alles, was nicht "normal" ist *g* Also, Charts-Pop und HipHop und vor allem Soul-Gejaule gehen schonmal gaaar nicht. Kill R.Kelly!

Beim Programmieren (zuhause, net im Büro *lol*) je nach Stimmung Black Metal (Therion, Tristania & Co.), alten und neuen Indie-Electro-Pop und EBM (DM, VNV Nation, F242, Nizzer Ebb usw.), älteren Brit-Pop und Gruft-Rock (James, Smiths, Sisters of Mercy, Cassandra Complex) oder auch mal "schöne Stimmen" der Sorte Kate Bush, Tori Amos, Peter Gabriel. Oder wenn meine Stimmung ganz anders tickt, dann blubbert auch mal Trance und Elektro.

Thema: "Patterns & Practises" - Zur Nomenklatur von Datenbanken, Tabellen und Feldern
Am im Forum: Datentechnologien

Sodale, ich wollte die "Patterns & Practises", also hier mal eine Praktik zur Benennung von Datenbanken, Tabellen und Feldern.

Grundsätze
Der Grundsatz bei der Benennung ist stets, dass die Namen selbstdokumentierend sein sollten. Das vorgestellte Schema ist bereits Jahrzehnte alt (ja, wirklich) und stammt noch aus Mainframe-Zeiten. Es mag auf den ersten Blick umständlich erscheinen (so umständlich etwa, wie eine Variable "vorname" statt "vn" zu nennen), führt jedoch zu sehr lesbaren SQL-Statements.

1. Datenbank-Name
Oft ist der Name einer Datenbank vorgegeben, z.B. bei Datenbanken, die auf einem Webserver per Web-Interface erstellt werden. Dann treffen die hier gemachten Vorschläge natürlich nicht zu.

Wenn der Name frei zu vergeben ist, sollte er aus zwei Teilen bestehen, die zusammen den Sinn der Datenbank komplett dokumentieren. Bei sehr großen Datenbanken (groß iSv "bildet viel ab") kann auch ein Begriff den Sinn der Datenbank beschreiben.

Beispiele:

  • CustomerRelations
  • SourcecodeRepository
  • myCSharp
2. Tabellen-Namen
Der Name einer Tabelle reflektiert den Inhalt. Das klingt erstmal trivial, ist aber oft vernachlässigt. Enthält die Tabelle also Produkte, so heißt die Tabelle konsequent "Produkte" oder "Products" (und nicht anders!).

Die (quasi-)englische Variante ist aus einem einfachen Grund zu bevorzugen: Englische Plural-Bildung besteht idR aus dem einfachen Anhängen eines "s", während die deutsche Plural-Bildung sehr unregelmäßig ist.

Warum "quasi"? Weil man sich von der grammatisch korrekten Plural-Bildung bei den Ausnahme-Fällen trennt. So wird aus einer Tabelle, die Städe beinhaltet, also eigentlich "cities", dennoch "Citys". Der Sinn wird später klar.

3. Feld-Namen
Das Thema der Feld-Benennung ist am komplexesten, aber es gibt klare Regeln, die nur eins fordern: keine Ausnahmen.

Eine Zeile (Row, Record) beinhaltet die Information zu einem Objekt. Deswegen beginnt der Name eines Feldes prinzipiell mit dem Singular des Tabellen-Namens. Wenn also die Tabelle "Persons" heißt, beginnt der Name jedes Feldes mit "Person". Die weitere Benennung ist Geschmacksache. Für bestimmte Datentypen gibt es jedoch sinnvolle Konventionen:
  • ID - "PersonID"
  • bool'sche Werte - sind entweder "is"s oder "has"s: "PhoneNoIsSMSCapable" (Tabelle "PhoneNos"); "ComputerHasInternetAccess" (Tabelle "Computers").
  • Datum-/Uhrzeit-Werte - enden - wenn der Feldname nicht bereits selbstredend ist - auf "At" oder "On" auf "From" oder "To" oder "Until", ggf. ergänzt um "D", "T" oder (nach eigenem Geschmack) "DT", wobei "D" einen reinen Datumswert, "T" einen reinen Zeitwert (time) und "DT" einen kombinierten Datum-Zeit-Wert markieren: "EventCreatedAt" (Datum-Zeit-Wert); "PersonBirthdate" (Datums-Wert, keine Ergänzung nötig); "AlertRememberAgainAtT" (Zeit-Wert).
  • Referenz-IDs (foreign keys) - werden durch den Singular der referenzierten Tabelle und "RFID" oder "PID" (pointer to ID) gekennzeichnet ("PersonAddressPID").
Der Sinn dahinter ist nicht, möglichst lange Feldnamen zu erzeugen, sondern Feldnamen, die sich selbst erklären. Das Feld "PersonGender" kann nur zur Tabelle "Persons" gehören. Dies erlaubt auch, halbautomatisierte Verfahren zur Erstellung von Tabellen, SQL-Abfragen usw. einzusetzen (deswegen der "Quasi-Plural"). Außerdem erübrigt es sich, in SQL-Abfragen Feldnamen durch den Tabellennamen zu qualifizieren:

SELECT Persons.*, Addresses.* FROM Persons, Addresses WHERE AddressID = PersonAddressPID

4. Referenz-Tabellen (n:m-Zuordnungen)
Hier gibt es keine feste Regel zur Benennung. Ich persönlich verwende zur Kennzeichnung einer solchen Tabelle ein führendes "x": xCompanysProducts, und kürze beim Feld dann ab: xCPCompanyPID und xCPProductPID.

Thema: Primärschlüssel erstellen
Am im Forum: Datentechnologien

Also, so ungern ich dem Meister widerspreche, in dem Fall muss es sein. ADO.NET kann alles, aber die Verwaltung von AutoIncrement-IDs ist eine sehr aufwändige Sache, zumal mit einer Datenbank, die nicht "Microsoft SQL Server" heißt. Ich würde die IDs selbst erzeugen, und das, was sich da geradezu aufdrängt, sind GUIDs.

Da Du früher oder später händisch in Deinen Tabellen rumhacken wirst (eher früher, nämlich in der Testphase), mach die ID-Spalte zum String mit 40 Zeichen Breite. String-GUIDs sind 38 Zeichen breit, aber die einfachste Methode, GUIDs zu generieren, nämlich die übers VS.NET, erzeugt Registry-GUIDs, und die sind um "{" und "}" ergänzt. Wenn Du dann in Access oder was-auch-immer rumhantierst und Deine ID-Spalte 40 Zeichen breit ist, kannst Du die Registry-GUID einfach über Clipboard in die DB-Tabelle kopieren und die geschweiften Klammern nach dem Einfügen weglöschen.

Wenn Du im Code die GUID generierst, brauchst Du keine speziellen (d.h. DB-spezifischen) Konstrukte, um für alle drei Tabellen die Keys zu erzeugen.

Nebenbei, um meinen Vorschlag zum "Patterns & Practises"-Forum zu forcieren, werde ich mal hier unter "ADO.NET" was zur Benamung von Datenbanken, Tabellen und Feldern posten.

Thema: CP.PickList
Am im Forum: Projekte

So, gerade ist die V0.2 fertig geworden. Sie hat eine stabilere Fehlerbehandlung und schmeißt jetzt einige eigene Exceptions. Die Änderungen sind auf der Beschreibungs-Webseite (s. erstes Posting) dokumentiert.

EDIT: Außerdem ist die Assembly jetzt signiert, sodass sie leichter in eigene Projekte einzubinden sein sollte, in denen auf sowas getestet wird.

Thema: Bilder im MainMenu
Am im Forum: GUI: Windows-Forms

oder wie immer bei diesem thema:
http://www.divil.co.uk/net/controls/sandbar/

Thema: VC++ / myC# IDE Projekt
Am im Forum: Ankündigungen

Also, was mir persönlich Spaß machen würde, wären ne Menge Add-Ons für das VS, da fehlt viel, auch wenn das VS 2005 davon einiges bieten wird, beispielsweise
* Property-Creator (mache ich derzeit über ein einfaches Makro, könnte man aber auch viel komfortabler gestalten), also "private string Bla" wird zu "private string m_bla" + getter und setter. Das kann mein Makro natürlich, aber en bloc-Konvertierung und ein paar andere Features wären schon ganz schmuck.
* Datenbank-To-DataSet-Definition-Wizard - FileOpenDialog bzw. Datenquellen-Browser, "Klick", Browse auf Tabellen, "Klick", fertig ist das DataSet.
* Auto-Favoriten-Importer aus einem bestimmten, festzulegenden Unterordner der IE-Favoriten, die dann als Menüpunkt mit "|>"-Symbol und den entsprechenden Unterpunkten angezeigt werden, weil man viele Dinge ja doch nicht unbedingt aus der MSDN hat.
* ein "Designer-Designer", um das PropertyGrid für ein selbstentwickeltes Control über eine grafische Oberfläche manipulieren zu können.

EDIT: Glatt vergessen, was mir noch einfällt, wäre eine Sammlung von Wrapper-Klassen für die Crypto-Sachen von .NET. Sprich: sowas wie:
* string[] myRSA.GenerateCryptKeyPair()
* string[] myRSA.GenerateSignKeyPair()
* string myRSA.ImportPublicKey(string filepath)
* string myRSA.CryptWithPublicKey()
* string myRSA.EncryptWithPrivateKey(string filepath)
etc. Das Ganze könnte (sollte) PGP-kompatibel sein, sodass man die üblichen Keys, die im Netz rumschwirren, benutzen kann, wobei da natürlich noch
* string myRSA.ImportPublicKeyFromURI(string URI)
geil wäre

Thema: Dataset.select
Am im Forum: Datentechnologien

Ähm... *fingerheb*

07/23/2004 00:00:00 = 07/23/2004 00:00:00
07/23/2004 16:00:00 > 07/23/2004 00:00:00
07/24/2004 00:00:00 > 07/23/2004 00:00:00

string d = myDate.ToString("MM/dd/yyyy");
string sql = "DateTime ≥ #" + d + " 00:00:00# AND DateTime ≤ #" + d + " 23:59:59#";

Thema: unverständliche konvertierung von String zu double
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hast Du irgendwas an der Lokalisierung geschraubt? Hast Du im String testweise mal den Punkt durch ein Komma ersetzt?

Thema: xml datei per soap übertragen
Am im Forum: Netzwerktechnologien

Wo denn, wo denn? Ah, jetzt ja... Dann machs doch einfach so:

<soap:body xmlns:m="jollex">
   <m:TransportXMLFile>
      <m:XMLContent>
{?xml version="1.0" encoding="utf-8"?}
{terminplaner xmlns:p="http://www.htw-dresden.de/s4137/person"}
{termin}
{absender}
{p:person}
{p:name}Hedler{/name}
{p:vorname}Martin{/vorname}
{p:datum tag="32" monat="01" jahr="1872" /}
{/p:person}
{/absender}
{text}Vortrag &uuml;ber Web-Services{/text}
{datum tag="22" monat="10" jahr="2003" /}
{/termin}
{/terminplaner}
      </m:XMLContent>
   </m:TransportXMLFile>
</soap:body>
Dann hast Du Deine XML-Datei so eingepackt, dass der SOAP-Parser die Finger daovn lässt. Du liest dann einfach den XMLContent-Knoten aus, ersetzt die geschweiften wieder durch spitze Klammern und hast eine unangetastete XML-Datei.

Thema: DataSet Problem
Am im Forum: Datentechnologien

das heißt, wenn ich von ner klasse erbe oder eine erstelle, die IDisposable implementiert, geht das auch bei eigenen? klasse klasse

Thema: Datei und Insert?
Am im Forum: Datentechnologien

Nur mal so als Idee:

Wie wäre es, wenn Du Deine DataTable gleich an die Tabelle der Datenbank bindest, statt sie manuell zu erzeugen? Wenn Du ein SELECT absetzt, dass auf jeden Fall 0 Zeilen zurückliefert ("WHERE 1 = 0"), hast Du zumindest mal eine sauber definierte Tabelle. Danach befüllst Du die DataTable wie gehabt mit DataRows und zeigst das DataGrid an. Wenn der Anwender die Daten nicht will, tust Du einfach gar nix. Wenn er sie behalten will, brauchst Du jetzt nur noch einen xxxCommandBuilder und kannst, weil die Rows ja alles den Status "added" haben, via xxxDataAdapter.Update(DataSet) alles in die Tabelle der Datenbank schreiben.

Thema: DataSet Problem
Am im Forum: Datentechnologien

klappt das mit dem "using" eigentlich bei database-connections auch so schmuck wie bei file-I/O?

und @ invisible: glaub mir, jeder, der in ADO.NET einsteigt, kriegt erstmal nen knoten in der birne, bis er nach und nach erkennt, wie elegant der entwurf eigentlich ist. vor allem lernt man eigentlich sehr schnell sehr viel bei dem thema und blickt nach ein paar experimenten recht flott durch. man sollte sich bloß nicht von der MSDN verwirren lassen, weil die so viele wege nach rom aufzeigt, dass man am ende nicht mehr weiß, welcher für welchen fall der richtige ist

Thema: xml datei per soap übertragen
Am im Forum: Netzwerktechnologien

äh, ich glaube, wir haben uns missverstanden (jedenfalls du und ich ), was das mit den strings betrifft.

dein code sieht erstmal okay aus. ich machs mir persönlich immer leicht dadurch, dass ich den xmlns auf irgendwas eigenes setze, weil es letztlich ja doch nur um das geht, was zwischen <soap:body ...> und </soap:body> steht.

mir ging es um was anderes, nämlich darum, dass du zum beispiel entweder

<soap:body xmlns:m="CP">
   <m:SubmitTicket>
      <m:CustomerID>47110815</m:CustomerID>
      <m:ProductID>12345</m:ProductID>
      <m:Version>2.1</m:Version>
      <m:Timestamp>2004-07-22 15:29:13</m:Timestamp>
      ...
   </m:SubmitTicket>
</soap:body>
oder kürzer
<soap:body xmlns:m="CP">
   <m:SubmitTicket>
      <m:TicketData>47110815;12345;2.1;2004-07-22 15:29:13;...</m:TicketData>
   </m:SubmitTicket>
</soap:body>
schreiben kannst. klar, ein guter XML-parser kann mit der ersten version 1000 tolle sachen anstellen, aber letztlich fummelt man sich seine daten dann doch bloß per parser in eine datenstruktur und friemelt sie dann in eine datarow oder so. und da ist es aus meiner erfahrung einfach praktischer, statt mit 100 tags zu arbeiten, einfach nur eins zu nehmen und das dann kurz und bündig zu verarbeiten. dieses pseudo-CSV-format hat sich bei mir vor allem eben immer dann bewährt, wenn es darum ging, daten in eine datenbank zu stopfen, weil die daten schon fast in datarow-format ankommen.

Thema: Wunsch für eine neue Forums-Ecke "Heulen & Zähneknirschen"...
Am im Forum: Wünsche und Kritik

Zitat
Original von NoOneKnows
Brainf*ck-Compiler

gibts schon ne syntax-spec für "brainf*ck"?

Thema: Datentransfer über TCP Socket
Am im Forum: Netzwerktechnologien

Zitat
Original von Scordo
generell sind die NetzworkStreams nicht wirklich zu empfehlen, in den meisten Fällen sollte man doch lieber auf die Low-Level-Socket-Implementierung zurück greifen und sich selbst was vernünftiges schreiben.

Is aber nicht so einfach da bei den Basis-Komponenten wirklich nur das nötigste implementiert ist und man ziemlich viel wissen bzw. sich anlesen muss um diese zu gebrauchen.
Jeppa, völlige Zustimmung. Das Framework gaukelt einem vor, IP wäre so schmuck einfach, dass das ein Kinderspiel sei, aber denkste. Ich würde mal sagen, wer noch keinen kleinen Server, der über IP arbeitet, in C geschrieben hat, inklusive fork() und solchen Späßen, wird sich auch mit dem Framework schwer tun, wenn er eine stabile, zuverlässige und performante Lösung entwickeln will.

Thema: News-Tool
Am im Forum: Smalltalk

hm... majordomo? für den gibts so viele tools und erweiterungen, dass das fast alles davon abdecken könnten sollte.

Thema: treeView CheckBoxen setzen
Am im Forum: GUI: Windows-Forms

MSDN sagt:

public bool Checked {get; set;}
Mit .NET-Bordmitteln wirst Du die Tristate-Fähigkeit der Checkbox also wohl nicht hinkriegen. Riecht mir nach einem sehr tiefen Griff in die WinAPI...