Laden...

Forenbeiträge von GMLOD Ingesamt 1.200 Beiträge

16.11.2008 - 21:21 Uhr

Geht sicher um Aktien - hab dich mal gegoogled. Das ist ja NOCH schlimmer g

16.11.2008 - 19:55 Uhr

Markets? Das hat aber nicht zufällig was mit Pferderennen und XML Webservices bestimmter Wettanbieter zu tun, oder?

16.11.2008 - 17:59 Uhr

Ich würde mit C auf "Hello World" Niveau beginnen. C ist aus der Softwareentwicklung fast gar nicht mehr wegzudenken, die kleinen Feinheiten (zählen ab 0, Semikolons) halte ich für kein Problem. Schließlich bekommt man dank C auch bessere Einblicke, was die grundlegende Funktionsweise der Maschinen anbelangt. Von grundlegendem C zu C++ oder C#, also einer objektorientierten Variante zu wechseln, halte ich dann für kein großes Problem.

Ich würde die Finger von VB und Konsorten lassen, dass erzieht das Kind doch förmlich zu faulem und schlechtem Code. Was man sich einmal so antrainiert hat, ist schwer wieder zu verlernen.

16.11.2008 - 17:35 Uhr

Warum zeichnest du mit GDI+ nicht einfach beim Drücken von "STRG" einen kleinen Punkt an die Position des Cursors?

16.11.2008 - 17:28 Uhr

1.) Fülle eine Liste mit allen möglichen Lottozahlen.

2.) Generiere eine Zufallszahl bis maximal [Anzahl Listeneinträge]

3.) Benutze diese Zufallszahl als Index, streiche den Wert dieses Eintrags aus der Liste

4.) Jump to Step 2 bis du deine 6 Lottozahlen hast.

Ganz einfach.

15.11.2008 - 21:23 Uhr

Im Prinzip geht es darum, saubere Transitionen zwischen den einzelnen Status herbeizuführen. Die Transitionen selbst sind innerhalb der einzelnen States gekapselt, dadurch wirst du z.B. dieses hässliche switch Statement los. Ausserdem beinhaltet jeder konkrete Status die Logik, die für ihn ausgeführt werden muss. Desweiteren reduziert sich der Wartungsaufwand, wenn irgendwo in der Kette etwas geändert oder hinzugefügt wird.

Rein technisch sieht das dann so aus, dass du ein Interface oder eine abstrakte Superklasse hast, von der deine einzelnen konkreten Status erben. Die Hauptklasse kennt nur die Schnittstelle und operiert dann immer auf dem gegenwärtigen Status, der ja selbst weiss, was zu tun ist und ggf. die Transition zum nächsten Status durchführt.

Das ist recht einfach zu implementieren, siehe folgende Resourcen:

http://www.codeproject.com/KB/architecture/statepatterncsharp.aspx
http://msdn.microsoft.com/en-us/magazine/bb985799.aspx (Fig. 6, 7, 8 )

15.11.2008 - 20:00 Uhr

Anubis:

Statemachine Pattern verwenden! Du wirst davon profitieren!

15.11.2008 - 11:59 Uhr

Das ist mal was lustiges, wirklich IT-bezogenes: http://kryptochef.net/

KAUFT NOCH HEUTE!

13.11.2008 - 20:36 Uhr

Dann hol dir nicht die Light Version. Das sind auch keine 104MB. Du brauchst auch nicht alles, was da drin ist, denke ich.

Jedenfalls hast du definitiv die falsche Version oder du hast eine ältere vollständige Clientinstalltion nicht sauber deinstalliert und deswegen die falschen DLLs. Da ist nichts 104MB groß.

13.11.2008 - 20:24 Uhr

Ja, gibt dem Adapter halt einfach einen anderen Select Query.

13.11.2008 - 20:06 Uhr

Du hast das falsche Package geladen. Da gibts mit Sicherheit keine einzige so große dll.

http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html

Nimm die Basic Lite Version.

13.11.2008 - 13:00 Uhr

Ich kenn da einen, der ist vielleicht 8. Und der spielt Geige wie ein Meister. Einfach nur ein kleines Genie.

Das mag sein, aber, sagen wir mal, die grundlegende Funktionalität einer Geige ist wesentlich begrenzter als die eines Frameworks oder der IT generell.

Ich finde, auch ein Supertalent wird Jahre brauchen um sich mit allen verschiedenen Themenbereichen auseinanderzusetzen: Networking, Architektur, Datenbanken. Es geht auch immer darum, was man mit der Sprache machen will. Viel ist einfach nur Erfahrung. C# gut verstehen ist die eine Sache - verstehen was wirklich getan wird eine andere. Und um sich das technologische Wissen anzueignen braucht man meist sehr lange.

13.11.2008 - 12:53 Uhr

Du brauchst eine Mapping Tabelle, die die UserID und die jeweilige ThemenID speichert. Auf diese Weise kannst du dann feststellen, welcher User schon welches Thema oder Post gelesen hat. Kommt in einem Thema ein Update (also ein neues Post), werden einfach alle Einträge mit dieser ThemaID aus der Mapping Tabelle gelöscht.

Am besten baust du dir für diese Routinen Trigger.

13.11.2008 - 12:51 Uhr

Ich hab keine Ahnung was die Provider da genau machen und warum diese Fehlermeldung kommt.

Ruft die Funktion vielleicht irgendwelche generischen Spalten ab? Ist CHECF z.B. eine Spalte? Füllst du das ganze gar über Parameter?

Also wenn das fix ist, könntest du einfach mal deinen Query in eine View einbauen und dann diese abfragen.

10.11.2008 - 23:15 Uhr

Für jeden RETR auf das "+OK" warten, dann beginnt die Message.

Wenn du auf eine Leerzeile mit einem "." stößst ist die Message fertig geladen. Ausserdem wird nach dem "+OK" die Anzahl der bytes (Octets) der Message gesendet. Du könntest also bei jedem "." der in einer Leerzeile ist prüfen, ob die Länge der Strings mit der Anzahl der byte übereinstimmt.

http://www.faqs.org/rfcs/rfc1939.html

10.11.2008 - 22:55 Uhr

Allerdings ist mir persönlich WCF etwas zu schwerlastig - ich brauche nicht wirklich XML - ich brauche nicht irgentwelche Sachen um objecte oder functionen zu verschicken ich will was einfacheres. Außerdem ist mir der Overhead zu groß von SOAP.

Stichworte: TCPListener, TCPClient.

Zwar soll Technologie bereits einige Komforfunktionen haben - wie die überprüfung ob das datenpacket angekommen ist und es bereits einen overhead gibt der dinge wie zielip port etc enthält.

Lol, ohne Ziel-IP wird wohl in einer auf dem IP basierenden Welt nicht viel - rein gar nichts - ankommen.

Allerdings würde ich gerne die Größe des Datenpackets selbst bestimmen (weiß nicht in wieweit es stimmt aber bei soap (oder generell??) ist es ja so das ein Datenpacket mindestens 1 kb groß ist? (1 kb is mir zuviel)).

Schlechte Idee. Sehr schlechte Idee. Sowas würde ich nicht manuell machen. Hmm, da würde ich mir mal jetzt den SOAP Header angucken. Wenn man nur einen leeren SOAP-Envelope schickt, könnte man auf die Idee kommen, dass das nicht ganz ein KB ist:

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://www.w3.org/2001/12/soap-envelope">
    <s:Header>
    </s:Header>
    <s:Body>
    </s:Body>
</s:Envelope>

Ausserdem ist doch 1KB bei heutigen Bandbreiten nicht mehr wirklich viel. Zusätzlich muss natürlich noch der Transmission-Overhead eingerechnet werden, d.h. Checksummen und Zielinformationen, die zwingend erforderlich sind fressen immer auch noch ein paar Bytes (falls TCP die Transportschicht bildet).

Weiterhin würde ich gerne den inhalt des datenpackets möglichst selbst binär schreiben - juckt mich schon ne ganze weile nen eigenen binärcodierer und decodierer zu schreiben

Letztendlich ist alles binär, alles sind nur bits und bytes. Egal was du schickst. Da muss meistens nicht groß codiert werden, es sei denn, du hast komplexe Objekte die die Gegenseite wieder zusammensetzen muss. Sowas nennt sich dann Objekt-Serialisierung (Forensuche verwenden) und sollte besser nicht von Hand gemacht werden.

^^, außerdem würden mich die grundlagen der Netzwerkprogrammierung interessieren und nicht ganz oben bei Webservices anfangen.

Ich würde dir dennoch raten, eher auf einem Top-Layer anzufangen und sich dann "runterzuarbeiten". Erstmal lernen wie Protokolle so strukturiert werden. HTTP wäre schonmal ein Anfang. Zumindest aber TCPClient und TCPListener.

Und das letze - was Winsock ausschließt - die datenpackete sollten von Linux (ohne wine) empfangen und gelesen werden können (Mac unterstützung is mir nicht so wichtig).

Empfangen kann die Datenpakete schlichtweg jeder. Es ist nur die Frage, ob die Gegenstelle diese auch zu interpretieren vermag. Hier wäre der klare Vorteil von SOAP z.B., dass die Interoperabilität durch die XML Verpackung enorm gesteigert wird.

Allerdings muss ich zugeben das ich noch nicht soooo viel über webservices weiß und ich auch diese verwenden würde wenn mir jemand gute gründe nennen würde warum ich sie doch verwenden soll und was die vorteile sind, den bis auf das es schneller geschrieben ist sehe ich keine wirklichen vorteile für mich, außerdem werden ja die datenpackete um einiges größer.

Sei doch froh, dass dir bei (XML-)Webservices schon so viel von der Kommunikation abgenommen wird, also du nichts selber schreiben musst. Das ist ein großer Vorteil. Ausserdem natürlich Interoperabilität (siehe oben), Wartbarkeit durch höhere Abstraktion (wenn richtig gemacht) und leichtere Erweiterbarkeit/Anpassbarkeit. Durch die "Engines", welche die Webservices dann letztendlich verfügbar machen (Application Server z.B.), hast du zusätzlich die Möglichkeit Lasten besser zu skalieren. Um so etwas müsstest du dich sonst mühsam mit eigenem Code kümmern.

Achtung ich bin durchausbereit 1-2 monate in die Netzwerktechnologie zu investieren

Dann les dein Buch über WCF, das Wissen ist Gold wert.

Edit:
Typo Typo Typo!
TORA TORA TORA!

10.11.2008 - 22:39 Uhr

Das wurde schon tausendmal besprochen. Nutz doch die Board Suche und poste die besten Ergebnise hier. Sollte vielleicht auch mal mit einem FAQ Eintrag gewürdigt werden.

10.11.2008 - 20:10 Uhr

Hier sind die einzelnen Formate: http://www.mssqltips.com/tip.asp?tip=1145

DATE FORMATS
Format # Query (current date: 12/30/2006) Sample
1 select convert(varchar, getdate(), 1) 12/30/06
2 select convert(varchar, getdate(), 2) 06.12.30
3 select convert(varchar, getdate(), 3) 30/12/06
4 select convert(varchar, getdate(), 4) 30.12.06
5 select convert(varchar, getdate(), 5) 30-12-06
6 select convert(varchar, getdate(), 6) 30 Dec 06
7 select convert(varchar, getdate(), 7) Dec 30, 06
10 select convert(varchar, getdate(), 10) 12-30-06
11 select convert(varchar, getdate(), 11) 06/12/30
101 select convert(varchar, getdate(), 101) 12/30/2006
102 select convert(varchar, getdate(), 102) 2006.12.30
103 select convert(varchar, getdate(), 103) 30/12/2006
104 select convert(varchar, getdate(), 104) 30.12.2006
105 select convert(varchar, getdate(), 105) 30-12-2006
106 select convert(varchar, getdate(), 106) 30 Dec 2006
107 select convert(varchar, getdate(), 107) Dec 30, 2006
110 select convert(varchar, getdate(), 110) 12-30-2006
111 select convert(varchar, getdate(), 111) 2006/12/30

TIME FORMATS
8 or 108 select convert(varchar, getdate(), 8) 00:38:54
9 or 109 select convert(varchar, getdate(), 9) Dec 30 2006 12:38:54:840AM
14 or 114 select convert(varchar, getdate(), 14) 00:38:54:840

Das Internet sagt:

Am einfachsten sei es das Datum ins ISO Format zu konvertieren (yyyy-mm-ddThh:mm:ss), was bei dir schon fast der Fall ist, und dies dann einfach zu einer DateTime zu casten:

Insert Into Tabelle1 (Datum1)
Select cast(substring(Datum1,1, 10) + 'T' + substring(Datum1, 12, 8) as datetime) from Tabelle2

... wenn es denn der SQLServer so frisst. Dem seine Fressgewohnheiten kenne ich nämlich so ganz und gar nicht

10.11.2008 - 14:18 Uhr

Also für mich sind Hashes eigentlich größtenteils dafür da, Passwörter vor dem Abhören und vor den Admins zu schützen.

Edit: Ersteres wäre natürlich besser per Verschlüsselung, vorzugsweise asymmetrisch, zu bewerkstelligen.

10.11.2008 - 10:45 Uhr

Und ausserdem ist nur das Property "Number" öffentlich.

10.11.2008 - 10:43 Uhr

Wenn der Angreifer keine Einsicht in deinen Quelltext hat oder die Hashes nicht kennt, bleibt ihm nur die Brute-Force Möglichkeit über dein Interface. Da kann man natürlich nach 3 Fehlversuchen gleich einen IP-Ban zuschlagen lassen oder den Angreifer zumindest ein paar Minuten warten lassen, ohne das eine Verzögerung fürs Hashing eingebaut sein muss.

10.11.2008 - 09:12 Uhr

MD5 sollte auf keinen Fall mehr als Digitaler Fingerabdruck verwendet werden.

Einführende Informationen, wieso, weshalb und warum gibts (allg.) verständlich unter:
[URL=
>
]Geburtstagsangriff[/url]

>

Das ist schon klar, hat aber eher kleineren Einfluss auf kleine Datenmengen, da man einfach nicht genug Spielraum für Variationen hat. Ich denke auch, dass dieser Angriff eher akademischer Natur ist, da es extrem schwer ist 2x "sinnhafte" Daten mit dem gleichen Hashwert zu erstellen. Auch hat der Angreifer im Szenario hier nur Kontrolle über eines der Dokumente, was die Anpassung noch zusätzlich erschwert.

Aber grundsätzlich sollte man MD5 nicht mehr benutzen, weshalb ich ja auch Blowfish empfohlen habe.

09.11.2008 - 12:09 Uhr

Das hab ich gefunden: http://www.amazon.com/Programming-NET-Components-Juval-Lowy/dp/0596102070

Kann jemand was dazu sagen? 62 reviews, fast 5 Sterne. So schlecht kanns nicht sein. Werd's ordern.

09.11.2008 - 11:47 Uhr

Bin auch interessiert. Am liebsten praxisbezogen.

09.11.2008 - 11:44 Uhr

Warum lädst du die Typen nicht aus einem Config-File in das Dictionary? Das erleichtert doch grundsätzlich die Arbeit und man könnte so eine Klasse für ziemlich viele Zwecke einsetzen. Immer neu zu kompilieren, wenn etwas dazu kommt, erscheint mir recht blöd.

So wie du es haben willst, also statisch im Programm, sollte man doch dann eher mit Konstanten arbeiten. Im Java wären Enums dafür hervorragend geeignet, in C# musst du dann wohl mit const Strings arbeiten. Intern könntest du ja weiter das Dictionary verwenden um die Funktionalität zur Verfügung zu stellen.

09.11.2008 - 11:31 Uhr

MD5-Hash ist im wesentlichen sicher genug.

Genau! Rein akademisch ist es zwar als Checksum für größere Datenmengen gebrochen worden, aber eine Kollision für kleinere Datenmengen, wie z.B. Passwörter, zu errechnen ist immer noch recht schwer und besagte Kollisionen scheitern dann auch meistens an Validierungsroutinen.

Edit: Trotzdem sollte man wenn möglich überall schonmal auf Blowfish etc. setzen und immer schön Salts benutzen.

08.11.2008 - 17:25 Uhr

Du kannst doch überall einfach ein Panel mit diesen Buttons einfügen! Das ist doch fix selber gebaut.

07.11.2008 - 16:48 Uhr

Es geht sogar viel einfacher mit System.Text.RegularExpressions.Regex.Escape(String s). Alles schon builtin im Framework.

Edit: Man beachte aber die PITFALLS dieser Vorgehensweise. Vielleicht hat ja einer noch was besseres, mein Kopf ist am Ende für heute.

07.11.2008 - 16:41 Uhr

Bau dir doch ne Methode in eine Utility Klasse (oder gar eine Extension Method für die String Klasse, welche alle Escape Sequences eleminiert:

public String Unescape(this String s)
{
   return s.Replace("\n", "\\n").Replace("\t","\\t"); //usw.
}

Gibt doch nicht so viele: MSDN: Escape Sequences

Wäre nett, wenn du diese Methode dann hier zur Verfügung stellst.

07.11.2008 - 11:26 Uhr

Dann nutz halt die Events der DataTables.

07.11.2008 - 11:13 Uhr

Du machst das im falschen EventHandler. Du müsstest eigentlich den CellValueChanged oder den CellValidated Event nutzen.

Aber ich halte es für eine bad practice, jedemal in so einem EventHandler gleich zurück in die DB zu schreiben. Ich würde dem User lieber einen "Speichern"-Button anbieten.

07.11.2008 - 11:10 Uhr

So ein Sniffer sollte auf blöd auch viele Protokolle sofort erkennen und dann in geeigneter Form darstellen oder diese Pakete zumindest markieren.

Ich persönlich halte C# für keine gute Wahl, um so ein Programm zu realisieren. Man braucht auf jedenfall immer ein plattformabhängiges library zur Kommunikation mit der NIC. Auf dieses library müsste man dann die Auswertungslogik aufsetzen ( C/C++ würde ich da nehmen und es dann pro Plattform einmal kompilieren) und da könnte man dann unter Umständen ein Frontend mit C# draufsetzen für Windows zumindest.

Ausserdem meine ich: Schau dir doch einfach mal die Sources von ettercap an.

07.11.2008 - 10:18 Uhr

Zunächst liest du das Memory:

http://www.pinvoke.net/default.aspx/kernel32/ReadProcessMemory.html

Dann castest du es oder konvertierst es. Dafür nutzt du die üblichen Verdächtigen, wie z.B. Encoding.GetString oder die Methoden des BitConverters.

07.11.2008 - 09:12 Uhr

Mit der System.Diagnostics.Process Klasse solltest du in der Lage sein Daten an den Standard Input des anderen Prozesses zu senden.

Falls deine Konsolenanwendung allerdings keine Daten von stdin liest, dann hast du ein Problem. Kommunikation per Textfile halte ich gelinde gesagt für suboptimal. Am besten bohrst du den Part der Konsolenanwendung, der von der Schnittstelle liest, ein wenig auf und kompilierst ihn in ein eigenes Assembly. Dieses Assembly könntest du dann sowohl in Konsolen- als auch in Winformsanwendungen nutzen, du hättest dann keinen Bedarf mehr für eine Konsolenanwendung.

Wenn du weiterhin etwas "Eigenständiges" zur Kommunikation mit dem Port haben willst, würde ich dir raten, die Anwendung zu einem Service umzubauen, welchen du nur noch startest und stoppst. Kommunikation sollte hier dann per Remoting oder simples TCP stattfinden.

07.11.2008 - 00:01 Uhr

Bin Quereinsteiger und C# ist eigentlich mehr als Hobby zu sehen. Genaugenommen mache ich beruflich fast ausschliesslich PL/SQL.

06.11.2008 - 23:40 Uhr

Gnaaahhh,

Angabe lesen^^

die erste Antwort von GLMOD triffts wie immer, dann kommt was anderes.

@GLMOD: zu deinem Edit im zweiten Post: dein erster Versuch ist deutlich besser^^ Aber ich würde inner join vorziehen.

@Didikong:

soll LogID ein Primary Key mit Autoincrement sein? Bitte dann auch dazuschreieben, weil wenn er das nicht ist, trifft keine der Lösungen.

🙂

Xynratron

Wieso? Was die Performance anbelangt, das sollte stark RDBMS abhängig sein. Obwohl sicherlich eher das Resultset in der ersten Abfrage gecached wird als in der Zweiten. Der zweite Query ist halt schöner zu lesen.

06.11.2008 - 18:19 Uhr

... und werden bis in ca. 3 Monaten schon einmal eine Minimal-Beta-Version fertigstellen, die ihr euch dann hier herunterladen könnt.

Wann kommt sie?

06.11.2008 - 16:28 Uhr

Da gäbe es mehrere Möglichkeiten:

Entweder die Datensätze "Descending" sortieren und den 1. Auslesen
SELECT TOP (1) LogDateTime FROM...

Den Datensatz mit SELECT MAX(LogDateTime)... auf den richtigen Datensatz beschränken
(Die anderen Felder müssen dann in die GroupBy Klausel)

Oder du löschst die "falschen" Werte aus dem Select heraus. Möglich durch ein SubSelect.

Gruß,
TriB

EDIT: Da war einer schneller, aber ich zeige hier ja noch 2 andere Möglichkeiten auf 🙂

Bzgl. EDIT. Deine zwei "Möglichkeiten" haben aber nichts mit der Problemstellung zu tun.

Die Erste holt nur einen Datensatz überhaupt, bei der Zweiten bekommst du nicht das eindeutige LogType Feld.

Und rastalt hat auch überhaupt nix gelesen.

*PROFILIER* g

Edit: Am besten wäre wahrscheinlich:

select * from log where LogID in (select max(LogID) from log group by EmployeeID);

06.11.2008 - 15:52 Uhr

So gehts in einem Aufwasch:

select employee.LogDateTime, employee.EmployeeID, log.LogType from
(select EmployeeID, max(LogID) as LogID , max(LogDateTime) as LogDateTime from Log group by EmployeeID) employee, log
where log.LogID = employee.LogID;

06.11.2008 - 10:13 Uhr

uhhhm:

where   table1.id1=table2.id1
and     table1.id2=table2.id2
and     table1.id3=table2.id3

??

06.11.2008 - 09:34 Uhr

Langeweile und Fortbildung hauptsächlich.

N bissal vielleicht um anderen zu helfen grml

06.11.2008 - 09:00 Uhr

Zeig doch mal ein Video wie man sich einloggen kann und wie du das im Server Management monitoren kannst g

Wie schauts denn aus? Habt ihr auch schön nen Cluster (zumindest nen virtuellen) um eure Serversoftware zu testen? Patcher, Loginserver, Datenbankserver und Gameserver? Ist das auch skalierbar? Nein, sowas gibts nicht? Ihr fangt mit den Frontends an? g

Was ich eigentlich zum Ausdruck bringen will:

Bevor hier alle Naivlinge weiterhin: "Sieht gut aus!" und "Tolle Arbeit" posten, sollte erstmal Funktionalität demonstriert werden. Erst dann gibts Respekt.

Aber dass das nichts wird, ist schon absehbar. Schließlich wird hier erstmal auf Graphiken und, vermutlich unfunktionale, Loginbildschirme gelegt, als auf ein solides Gerüst.

06.11.2008 - 08:51 Uhr

Also ich denke, dass das Konsolen-Fenster geschlossen wird, sobald der Prozess beendet ist.

Um dem entgegenzuwirken, würde ich vom Winforms Programm aus dynamisch eine Batch-Datei erstellen, die dann statt des ursprünglichen Prozesses gestartet wird. In der Batch würde ich hinter den Programmaufruf des Programmes, das du eigentlich starten willst, dann einfach den "pause" befehl klemmen, um das Konsolen-Fenster offen zu halten.

06.11.2008 - 08:42 Uhr

Beim MSSQL:

CREATE TRIGGER trig_updateAuthor

ON authors

FOR UPDATE

AS

DECLARE @oldName VARCHAR(100)

DECLARE @newName VARCHAR(100)

IF NOT UPDATE(au_fName) AND NOT UPDATE(au_lName)

BEGIN

RETURN

END

SELECT @oldName = (SELECT au_fName + ' ' + au_lName FROM Deleted)

SELECT @newName = (SELECT au_fName + ' ' + au_lName FROM Inserted)

PRINT 'Name changed from "' + @oldName + '" to "' + @newName + '"'

Quelle: http://www.devarticles.com/c/a/SQL-Server/Using-Triggers-In-MS-SQL-Server/2/

Wichtig ist hier die Zeile "IF NOT UPDATE", dort wird geprüft, ob die angegebenen Spalten im Update enthalten waren oder nicht.

Referenz: http://msdn.microsoft.com/en-us/library/ms187326(SQL.90).aspx

05.11.2008 - 14:00 Uhr

Mich würde erstmal die Spezifikation der einzelnen Schnittstellen interessieren. Gibts ein ER Diagramm des Datenmodells?

Habt ihr überhaupt ein brauchbares technisches Designdokument (das müsste für ein MMORPG sicher mindestens so an die 500 Seiten haben).

Falls nicht: GOOD LUCK, hr.

Edit: Ich möchte nicht gehässig erscheinen, aber ich halte euer Vorhaben für absolut utopisch.

05.11.2008 - 13:53 Uhr

Und das fehlende Intelisense und die teilweise umständlichere Schreibweise :

// Mit DataSet  
ds.Tables["Positionen"].Rows[0]["Gesamtpreis"] = (double)ds.Tables["Positionen"].Rows[0]["Menge"] * (double)ds.Tables["Positionen"].Rows[0]["Einzelpreis"];   
   
// Mit O/R-Mapper  
po.Gesamtpreis = po.Menge * po.Einzelpreis;  

Grüße Bernd

Wenn du mit typisierten DataSets arbeitest entfällt aber der cast. So schlimm find ich das jetzt auch nicht, ehrlich gesagt. Und der Vorredner meinte noch, die Typisierung sei schlecht? Dies kann ich nicht nachvollziehen, zumindest für typisierte DataSets.

Ausserdem: Das, was du da machst, sollte eigentlich über eine Expression Column abgefackelt werden.

Jetzt fangt mal nicht an über ADO.NET zu lästern 😁

04.11.2008 - 15:26 Uhr

Ich würde immer nur die 2 neuesten aus der DB holen. Das müsste beim SQLServer mit

SELECT TOP 2 col1, col2, colx from tbl order by aTimeStamp_or_anID desc

gehen.

04.11.2008 - 15:00 Uhr

Ähmm, wieso nicht einfach die File.Exists-Methode verwenden?

04.11.2008 - 14:53 Uhr

Das war doch von Anfang an klar, dass das ADO.NET Entity Framework Microsofts ORM Flagschiff werden wird.

LINQ 2 SQL diente doch mehr als Proof of Concept für LINQ, meiner Ansicht nach. Die Stärke von LINQ ist doch gerade, dass man mittels verschiedener (oder auch eigener) Provider so gut wie alles standardisiert abfragen kann.

Mir schwebt z.B. ein LINQ 2 MyWebService vor.