Problem bei Tcp-Client/Server basierendem DB-Programm
-
hallo leutz,
ich hab derzeit praktikum und ein problem. ich erstelle mit VC++ 08 ExpressEdition von MS ein DB-TcpClient/Server-Programm. das programm läuft offline, also der client holt daten vom server, legt diese in einem dataset ab und ermöglicht die bearbeitung. jedoch hab ich im Server ein problem. hier der code zur aufbereitung des Server-DataSets in byte-Arrays zum transport per Stream:
for (int a = 1; a <= anzahlrows; a++) { DataRow^ row = zwischentable->Rows[a]; for (rowspalte = 2; rowspalte <= 9; rowspalte++) { data = nullptr; if (row[rowspalte]->ToString() != "") { data = row[rowspalte]->ToString(); array<Byte>^ msg = System::Text::Encoding::ASCII->GetBytes(data); array<Byte>^ msgantw = nullptr; stream->Write(msg, 0, msg->Length); bool erfolg = false; while (erfolg == false) { bytesi = stream->Read(msgantw, 0, msgantw->Length); // Hier String^ dataantw = System::Text::Encoding::ASCII->GetString(msgantw, 0, bytesi); if (dataantw == "Empfangen") { erfolg = true; } } } else { data = "leer"; array<Byte>^ msg = System::Text::Encoding::ASCII->GetBytes(data); array<Byte>^ msgantw2 = nullptr; stream->Write(msg, 0, msg->Length); bool erfolg2 = false; while (erfolg2 = false) { ibytes = stream->Read(msgantw2, 0, msgantw2->Length); //hier die 2. String^ dataantw2 = System::Text::Encoding::ASCII->GetString(msgantw2, 0, bytesi); if (dataantw2 == "Empfangen") { erfolg2 = true; } } } } dssent = dssent + 1; }problem ist eine System.NullReferenzException (Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt) in oben markierter Zeile.
der selbe fehler wird an 2. markierter stelle wahrscheinlich auch auftreten. ich hab keine ahnung woran es liegt.zusatzinfo: dieser fehler trat auf nachdem ich die for-schleifen (bsp erste for-schleife)
for (a = 1; a == anzahlrows; a++)in
for (a = 1; a <= anzahlrows; a++)änderte.
die andere for-schleife wurde auch von == in <= abgeändert. Code oben ist der aktuelle (abgeänderte) code.
hoffe ihr könnt mir helfen.
mfg Poppkins
-
Ich glaub, du hast vergessen, die Zeile zu markieren...

Übrigens hast du in deiner if-Abfrage jede Menge redundanten (doppelten) Code. Das solltest du bei Gelegenheit (wenn es läuft) überdenken, sowas kann man deutlich kürzer fassen. Wenn etwas unabhängig von der if-Verzweigung ausgeführt werden soll, sollte es auch wenn möglich außerhalb davon stehen.
-
mhh^^ entweder ist das der kaffee oder aber ich denke shcon wieder per brain-goto und vergess zwischenschritte
-
ich dachte mir evtl wäre es nützlich wenn ich den teil der variablendeklarierung mal noch rein stelle:
Int32 bytesi; int port = 18000; int anzahlrows = bindingSource1->Count; bool connect = false; bool serverexist = false; IPAddress^ localAddr = IPAddress::Parse(/*"Hier die IP Adresse"*/); TcpListener^ server = gcnew TcpListener(localAddr,port); server->Start(); array<Byte>^ bytes = nullptr; String^ data = nullptr;im Code oben wurde die Variable Int32 bytes auf Int32 bytesi abgeändert.
mfg
-
hab das problem gelöst mit der nullreferenzexception. habe dummerweise msgantw auf nullptr gesetzt. ist aber jetzt korrigiert.
habe allerdings zwei weitere probleme. das eine probier ich erstmal selbst zu lösen, bei dem anderen brauch ich hilfe. und zwar hat mein client-formuar ein dataGridView, welches die übertragenen daten anzeigen soll. folgendes prinzip:
dataSetClient wired mit empfangenen daten befüllt (dataSetClient->Tables->Add(tabelle)
bindigSource ist mit dataSetClient verbunden und bekommt nach befüllen des dataSets mit tabelle den DataMember tabelle.problem ist, dass die daten richtig in den columns/rows der tabelle stehen (laut debugger schritt-für-schritt war das zu erkennen), die tabelle auch im dataSet ist, jedoch das dataSet nicht im dataGridView angezeigt wird.
hoffe das war nicht zu sehr durcheinander...