Laden...
A
andreasp333 myCSharp.de - Member
EDI-Entwickler Österreich Dabei seit 24.08.2008 29 Beiträge
Benutzerbeschreibung

Forenbeiträge von andreasp333 Ingesamt 29 Beiträge

11.10.2010 - 15:42 Uhr

Tut mir leid, stehe diese Woche sehr unter Zeitdruck und wenn ich dann sowas lese, dass ich den Fehler besser selbst finden sollte, dann hilft mir das nicht weiter.

Habe das Problem jedoch mit Hilfe eines Kollegen lösen können:

vDES->Padding = PaddingMode::PKCS7;
vDES->Mode = CipherMode::CBC;

und nach dem Schreiben ein

vEncStream->FlushFinalBlock();

waren des Rätsels Lösung.

Danke trotzdem für die Denkanstöße! 😃

11.10.2010 - 15:11 Uhr

Ich habe jetzt das verschlüsselte C++ File in C# entschlüsselt und das verschlüsselte C# File in C++ entschlüsselt.

So wie es aussieht, wird beim Verschlüsseln & Ausgeben ins File, die letzten Zeichen abgeschnitten.

Es scheint im Buffer noch ein oder mehrere Charakters zu geben, die ich nicht rausbekomme.

@herbivore: ich bin für jegliche Kritik offen, solange sie sinnvoll ist!! Solch eine Aussage widerspricht dem Konzept eines Forums! Ich habe in den letzten Tagen nichts anderes gemacht, deshalb versuche ich hier um Rat zu Fragen.

11.10.2010 - 13:44 Uhr

Hallo zusammen,

ich habe in meinem C#-Projekt meine Konfig in XML ver- und auch wieder entschlüsseln können.
Jetzt habe ich den gleichen Code in mein C++-Projekt eingefügt. Dort gibts jedoch leider ein Problem nach dem anderen. Jetzt hab ich es fast geschafft!
Problem ist jetzt nur, dass beim Einlesen des XML-Files das letzte Zeichen '>' nicht vorhanden ist.

So verschlüssle ich die Daten:

			XmlSerializer ^vXML = gcnew XmlSerializer(vLDAPs->GetType());
			IO::FileStream ^vOutput = gcnew IO::FileStream(vLDAP_XML, IO::FileMode::OpenOrCreate, IO::FileAccess::Write);
			bool vFlag = false;

			vOutput->SetLength(0);

			DES ^vDES = gcnew DESCryptoServiceProvider();
			vDES->Key = ASCIIEncoding::ASCII->GetBytes("12345678");
			vDES->IV = vDES->Key;
			vDES->Padding = PaddingMode::None;
            CryptoStream ^vEncStream =
				gcnew CryptoStream(vOutput, vDES->CreateEncryptor(),
				 CryptoStreamMode::Write);
//....

            try
            {
				// LDAP-Strings nun als XML abspeichern
				vXML->Serialize(vEncStream, vLDAPs);
	     }


Und so les ich die Daten wieder ein:

				 IO::FileStream ^vInput = gcnew IO::FileStream(vLDAP_XML, IO::FileMode::Open, IO::FileAccess::Read);
                 DES ^vDES = gcnew DESCryptoServiceProvider();
				 vDES->Padding = PaddingMode::None;
				 vDES->Key = ASCIIEncoding::ASCII->GetBytes("12345678");
				 vDES->IV = vDES->Key;
                 CryptoStream ^vDecStream =
                     gcnew CryptoStream(vInput, vDES->CreateDecryptor(),
					 CryptoStreamMode::Read);

				 try 
				 {
					 IO::StreamReader ^vRead = gcnew IO::StreamReader(vDecStream);

// Zum Testen was drinnen steht
					 for (int i=1; i<12; i++)
						MessageBox::Show(i.ToString() + ":" +  vRead->ReadLine());

					 vLDAPs = (List <LogIn^>^) vXML->Deserialize(vDecStream);

Das XML wird super eingelesen, einzig das Größerzeichen '>' fehlt zum Abschliesen des letzten Tags.

Hoffe dass einer von euch Profis mir da vlt. weiterhelfen kann!
Ich weis nämlich echt nimma weiter 😦

Danke schon mal!!!
lg Andreas

07.10.2010 - 12:37 Uhr

Sorry, für die späte Antwort.
Das wars auf jeden Fall!
Vielen Dank! 😃

04.10.2010 - 15:43 Uhr

Hallo zusammen,

ich möchte eine verschlüsselte Datei einlesen. Mit folgenden Code erhalte ich immer die Fehlermeldung:

Der angegebene Schlüssel hat eine ungültige Größe für diesen Algorithmus.

FileStream vInput = new FileStream(vLogInConfig, FileMode.Open, FileAccess.Read);

DES vDES = new DESCryptoServiceProvider();
CryptoStream vDecStream =
        new CryptoStream(vInput, vDES.CreateDecryptor(
            ASCIIEncoding.ASCII.GetBytes("Hallo Welt 4711 XXXX"),
            ASCIIEncoding.ASCII.GetBytes("Hallo Welt 4711 XXXX")),
        CryptoStreamMode.Read);

Verwende ich statt des langen String (Hallo Welt 47...) nur ein paar wenige Zeichen, funktioniert es.

Weis jemand was ich machen muss, damit ich als Schlüssel einen längeren String verwenden kann?

Vielen Dank schon mal für die Hilfe!

lg Andreas

18.08.2010 - 08:31 Uhr

Hi,

ich verstehe erlich gesagt nicht ganz was das Problem ist. Du bekommst eine Fehlermeldung wenn du eine DB2-Tabelle (ohne Bool-Spalten) in ein DataSet füllen willst?
Bin jetzt kein C#-Profi, deshalb jetzt meine vlt blöde Frage:
Wenn ich ein Fill auf ein DataSet ausführe, definiert das DataSet doch automatisch die Spaltenattribute für sich selbst oder?
Oder versuchst du Datensätze aus verschiedenen DBs in ein DataSet zu befüllen?

13.07.2010 - 12:59 Uhr

Hallo,

Neue Erkenntniss:
Das PGM friert immer dann ein, wenn ich den PC Sperre.
Aber auch nur dann, wenn ich im PGM eine Verbindung zu einer Datenbank hergestellt habe, ansonsten gibts kein Absturtz.

Im Debugmodus gibt es dieses Problem wiedereinmal nicht.

Vielleicht hat ja damit schon eher jemand mal Probleme gehabt!?

05.07.2010 - 14:07 Uhr

Hi Björn,

ursprünglich hatte ich sogar mit dem .NET Provider der IBM gearbeitet. Problem war nur, sobald ich das PGM auf einem PC starten wollte, dessen .NET Provider-Version älter war als die, mit der ich das PGM erstellt habe, bekam ich eine Fehlermeldung.
Bei ODBC war es dann kein Problem.

Ich habe sogar versucht, den .NET Provider als Lokal zu definieren (bekomme dann sogar eine Kopie der DLL ins release-Verzeichnis) hat aber immer noch nicht funktioniert.
Macht man das anders oder war ich eh auf dem richtigen weg?

Danke trotzdem für die Mühe!
lg Andreas

05.07.2010 - 12:47 Uhr

Hallo,

habe jetzt die Lese-Operation in einem eigenen Thread (mit Backgroundworker).
Da ich im PGM bei (z.B.) jeder Leseoperation eine Ausgabe ins Log schreibe, habe ich jetzt auch eine Ausgabe des ConnectionState mittels Timer (10s) gemacht.
Folgendes kommt dabei raus:

05.07.2010 09:38:32 Select Distinct COLUMN_NAME, COLUMN_TEXT, TYPE_NAME, COLUMN_SIZE, DECIMAL_DIGITS From SYSIBM.SQLCOLUMNS   Where TABLE_SCHEM = 'WFM40DANK2' And TABLE_NAME = 'WFML'
05.07.2010 09:39:38 Closed
05.07.2010 09:39:48 Closed
05.07.2010 09:39:58 Closed
.
.
.
05.07.2010 12:06:58 Closed
05.07.2010 12:07:08 Closed
05.07.2010 12:07:18 Closed
05.07.2010 12:07:28 Closed
05.07.2010 12:20:54 Closed
05.07.2010 12:20:54 Closed

Um 9:38 Uhr habe ich die letzte Aktion ausgeführt und um 12:20 Uhr wollte ich im PGM wieder weiter arbeiten.
Ab 12:07 Uhr hängt also das PGM (inkl. GUI).
Und wie ich versucht habe mit der Maus das PGM in der Taskleiste zu aktivieren, hat es noch ein letztes mal eine Protokoll-ausgabe gemacht.
Vielleicht hat ja noch jemand eine idee.

02.07.2010 - 11:38 Uhr

Hab festgestellt, das Umlaute nur als "?" dargestellt werden. What's wrong?

Das ist eigentlich das Problem vom Provider.
Wie verbindest du dich denn mit der Datenbank? Via DSN oder Connectionstring?

02.07.2010 - 11:10 Uhr

Aber das es jetzt an den Namen liegen kann. Naja egal 😉

Du hast als Parameternamen im Insert "@counter" stehen und im Parameter "counter"

02.07.2010 - 10:19 Uhr

wenn ich das normal mit einer kurzen Zeile lösen kann, wofür dann den Aufwand?

Im Artikel ist eigentlich sehr gut beschrieben wofür der Aufwand ist.
(Sicherheit, Stabilität, und Escape-Zeichen können dir dann auch egal sein)
Liegt jedoch an dir ob du das machen möchtest oder nicht. 😉

02.07.2010 - 10:15 Uhr
cmd.CommandText = "Insert into  myTabe (Feld) Values(correctString_1)";

Mal abgesehen, dass wenn du wirklich mit Parametern arbeiten möchtest, eigene Parameterinstanzen benötigst, die an den command angehängt werden müssen, kann der obige Code gar nicht gehen, sondern wenn dann so:

cmd.CommandText = "Insert into  myTabe (Feld) Values(" + correctString_1 + ")";
01.07.2010 - 15:36 Uhr

Danke für den Hinweis!
Bin mir nicht sicher ob das Problem dadurch behoben sein wird, ist aber eine gute Idee!
Das lustige ist nur, dass wenn ich mich zB NUR einlogge und sonst noch keine Tabelle einlese, die GUI nach einigen Stunden auch einfriert.
Und das LogIn habe ich sogar in einem eigenen Thread:

        private void _btn_Open(object sender, EventArgs e)
        {
            btn_Open.Enabled = false;
            mnu_Open.Enabled = false;
            bgw_Open.RunWorkerAsync();
        }
        
        private void bgw_Open_DoWork(object sender, DoWorkEventArgs e)
        {
            e.Result = con2DB2open();
        }
01.07.2010 - 14:38 Uhr

verwendetes Datenbanksystem: <DB2>

Hallo,

ich verbinde mich via ODBC auf die DB2 und kann im PGM die Tabellen bearbeite.
Habe eigentlich alles (meiner Ansicht nach) richtig gemacht.

vConnODBC = new OdbcConnection("Driver={Client Access ODBC Driver (32-bit)}" +
                  "; System = " + vLogIn.System +
                  "; UID = " + vLogIn.User +
                  "; PWD = " + vLogIn.Password +
                  "; DBQ = " + vLogIn.Library +
                  "; CATALOGOPTIONS=1; DEC=1; LIBVIEW=0; EXTCOLINFO=1; COMPRESSION=1; SSL=0; CMT=0" + vOptions);
}

try
{
    vConnODBC.ConnectionTimeout = 5;
    vConnODBC.Open();
    MessageBox.Show("Verbindung hergestellt", "Connection");

    return 0; // OK
}
catch (Exception e)
{
    MessageBox.Show(e.Message);
    return -1; // Fehler
}
finally
{
    vConnODBC.Close(); // Öffnet automatisch
}

try
{
    // Inhalt ins DataTable
    if (vReadAll)
    {
        vTab.Fill(vDS, getTableBez());
        vEndScroll = vDS.Tables[0].Rows.Count;
    }
    else
    {
        vEndScroll = tbl_File.Size.Height / tbl_File.RowTemplate.Height + 20;
        if (vEndScroll < 1)
            vEndScroll = 1;

        vTab.Fill(vDS, vStartScroll, vEndScroll, getTableBez());
        vStartScroll = vEndScroll;
    }
}
catch (OdbcException vSQLError)
{
    MessageBox.Show(vSQLError.Message, "Error");

    return -1; // Fehler
}
finally
{}

Wenn ich das PGM starte (ohne Debug), öffne die Verbindung, Lese mir eine Tabelle ein und lasse das PGM ein paar Stunden unberührt, friert es ein. Es reagiert auf gar nichts mehr und ich muss den Prozess via Taskmanager killen.
Wenn ich das PGM im Debug starte, bekomme ich nie das Problem.

Habe schon einen Timer probiert, der mir alle paar Sekunden ein open() und close() der Verbindung macht --> hat sich nichts geändert.

Hat jemand eine Idee woran es liegen könnt? Garbage-Collector?
Es soll möglich sein, dass ich das PGM den ganzen Tag laufen lassen kann.

Bis jetzt hat mir noch keiner Helfen können. 😦
Bin für jeden Hilfe dankbar!!

lg Andreas

24.03.2010 - 12:51 Uhr

schau dir auf der as/400 mal die ausgabe vom DSPFFD von beide tabellen an ob es da unterschiede gibt. vielleicht andere CCSIDs?

lg andreas

24.03.2010 - 12:50 Uhr

danke für die raschen antworten!

@vbprogger:
ich habe gehofft, dass der dataadapter automatisch erkennt, dass null nicht erlaubt ist und bei einem string "" bzw bei int 0 schreibt. das war wohl ein wunschdenken von mir 😉

@jürgen:
beim test arbeite ich sogar mit den DB2 .NET Data Provider. der hilft mir da aber leider auch nicht weiter.
den parameter-artikel habe ich sogar als grundlage verwendet 🙂

Danke!

24.03.2010 - 12:19 Uhr

hi,

ich habe überhaupt vor unsere dokumentation komplett auf tabellen in einer eigenen datenbank (ohne Dateien) umzustellen
der grund:
*) keine redundants die gepflegt werden muss!!!
*) skalierbarkeit
*) möglichkeiten von verknüpfungen.
zb: bei uns gibt es eine system-tabelle, in denen globale einstellungen abgespeichert werden. in der pgm-doku sollen auch diese einstellungen ersichtlich sein.
dadurch kann ich zb abfragen machen wie: welche pgms greifen auf eine bestimmte einstellung zu usw.
*) wenn sich das dokumentenformat ändern sollte, müsste ich dies bei allen dateien ändern. wenn ich ein pgm habe, welches mir das dokument generiert, brauch ich dies nur 1 mal anpassen.

lg andreas

24.03.2010 - 11:40 Uhr

verwendetes Datenbanksystem: <DB2>
C#, ODBC

Hi forum,

dank einiger hilfreicher beiträge von euch, bin ich nun dabei meine tabellenverwaltung umzubauen.
es soll jetzt bei jedem SQL-befehl nur noch OdbcParameter übergeben werden. (so wie sichs ja brav gehört).
das funktioniert auch ganz gut. probleme habe ich nur beim updatecommand mit dem setzen eines feldes, welches keine NULL-values erlaubt.

            String sql = "Update JOBPF Set job = ? Where ((jobnr = ?) or (?=1 and jobnr is null))";

            vTab.UpdateCommand = new ODBCCommand(sql, vConniDB2);

            vParm1 = vTab.UpdateCommand.CreateParameter();
            vParm1.SourceColumn = "JOB";
            vTab.UpdateCommand.Parameters.Add(vParm1);

            vParm1 = vTab.UpdateCommand.CreateParameter();
            vParm1.SourceColumn = "JOBNR";
            vTab.UpdateCommand.Parameters.Add(vParm1);

            vParm1 = vTab.UpdateCommand.CreateParameter();
            vParm1.SourceColumn = "JOBNR";
            vParm1.SourceColumnNullMapping = true;
            vTab.UpdateCommand.Parameters.Add(vParm1);

            try
            {
                vConniDB2.Open();
                vTab.UpdateCommand.Prepare();
                vTab.Update(vDS);
            }
            catch (ODBCException ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                vConniDB2.Close();
                vTab.UpdateCommand.Dispose();
             }

wenn ich jetzt im datagrid den einen wert aus dem feld lösche, wird automatisch ein set Job = null ausgeführt.
wenn aber jetzt null nicht erlaubt ist, gibt es einen fehler.
kann sein, dass die programmierung selbst das problem ist?!
auch wenn ich im parameter den vParm1.IsNullable = false; angebe, schreibt er null.

gibt es für solch einen fall eventuell einen allgemeinen ansatz? da ich nie wissen kann ob die spalte nun null-values erlaubt oder nicht.

bin für jeden verbesserungsvorschlag dankbar!

lg Andreas

12.03.2010 - 10:20 Uhr

ich muss mich da teilweise an cyanide anschließen.
ein forum ist eine plattform für alle die um hilfe ansuchen.
wenn sich jemand zu gut ist für manche beiträge zu antworten, dann ist er ja nich dazu gezwungen.
ich selbst habe auch schon mal die antwort "ich sags dir nicht, denn wenn du es selbst herausfindest hilft es dir viel mehr" erhalten, die absolut in kein forum gehört!

was ich aber sehr gut finde (auch als aussenstehender leser) ist, wenn zB FZelle links postet mit denen man sich weiterbilden kann.

lg andreas

19.01.2010 - 14:03 Uhr

also ich hab jetzt verstanden, dass es kein sequence aufm sql server gibt 😉 ... schade eigentlich!

ich habe mich da von dem link in die irre leiten lassen:
How-to-CREATE-SEQUENCE-in-MSSQL

19.01.2010 - 08:30 Uhr

ich gestehe, ich kenne mich mit msssql nicht so gut aus, da ich mehr mit der IBM DB2 arbeite.
jedoch verstehe ich nicht ganz, warum sequenzen in mssql nicht unterstützt werden soll, wenn ich aber auf verschiedenen seiten genau den von mir geposteten code finde (bei dem extra dabei steht für MSSQL)?

19.01.2010 - 08:13 Uhr

Hi Simon,

mir fällt da die verwendung von CREATE SEQUENCE ein.
bei sequence kannst du definieren von/bis und evtl. um wieviel hochgezählt werden soll.

[php] CREATE SEQUENCE MySeq
[ INCREMENT increment_value ]
[ MINVALUE minimum_value ]
[ MAXVALUE maximum_value ]
[ START start_value ]
[ CACHE cache_value ]
[ CYCLE ][/php]

und dann mit

[php]Insert into Mytable values (MySeq.NEXTVAL, ...)[/php]

lg andreas

14.01.2010 - 12:37 Uhr

kann es sein, dass du im frameworks die berechtigung anpassen musst, wenn du es als dienst laufen lässt?

lg andreas

15.12.2009 - 13:32 Uhr

hallo,

ich stand vor dem gleichen problem.
habe es so gelöst, dass ich in der Fill-Methode die Datensätze begrenzt ausgebe:

vTab.Fill(vDS, vStartScroll, 10, vFile);
vStartScroll += 10;

und am Scroll-Event angehängt, werden die nächsten Datensätze ins Datagrid ausgegeben.
Dadurch hab ich keine Performance-Probleme mehr, wenn ich Tabellen lese mit mehr als 1000 Datensätze

17.11.2009 - 12:47 Uhr

verwendetes Datenbanksystem: <DB400>

Hallo Forum,

ich habe ein seltsames Phänomen bei meinem Programm.
Es ist ein PGM zum Verwalten von Tabellen einer Datenbank.

Es passiert ab und zu, dass dieses PGM plötzlich einfriert und ich den Prozess killen muss, da gar nichts mehr reagiert. Dies allerdings nur dann, wenn ich min. ein mal eine Verbindung aufgebaut habe. Dabei ist es egal ob ich eine Abfrage einer Tabelle auch durchführe oder nicht.

Interessant ist, dass im Debug-Modus dieses Problem nicht auftritt.

vConnODBC = new OdbcConnection("Driver={Client Access ODBC Driver (32-bit)}" +
                                                      "; System = " + vLogIn.System +
                                                      "; UID = " + vLogIn.User +
                                                      "; PWD = " + vLogIn.Password +
                                                      "; DBQ = " + vLogIn.Library +
                                                      "; CATALOGOPTIONS=1; LIBVIEW=0;
                                                        EXTCOLINFO=1; COMPRESSION=1; SSL=0; 
                                                        CMT=0");

Das Programm arbeitet mit den Standard-Klassen von C#. Also ODBC, DataGrid, ...

Bin für jeden Rat, Tip oder Idee dankbar.
lg Andreas

11.08.2009 - 20:07 Uhr

hi flo,

danke für den hinweis.
hab eh schon paar mal mit chef drarüber gesprochen die gesammten tabellen auf sql umzustellen und mit PKs & FKs auszustatten.
soll dann sogar im nächsten release gemacht werden ... mal schaun.

aber danke schon mal für die antwort.

11.08.2009 - 16:38 Uhr

das ist eine sehr gute frage!! und ich hab bis jetzt noch keine vernünftigen antworten bekommen.
ich weis nur, dass es manche firmen gibt, die meinen, dass die db-integrität ausprogrammiert werden muss, anstatt mit Primary & Foreign-Keys zu arbeiten.

ich habs sogar auch schon per hand programmiert, sodass auch solche tabellen bearbeitet werden können, schöner wäre es natürlich, wenn ich meinen Code mit einem "create-update" ersetzen könnte.

der CommandBuilder erstellt ja irgendwie das Update mit den Spalten zusammen und es wäre sehr interessant nach welchem kriterium er spalten nimmt bzw. WO diese kriterien einzustellen sind.

eben mit dem zusatz "EXTCOLINFO=1" (erweitere spalten-infos liefern) im provider, geht das update auch auf alle anderen spalten, ohne dem zusatz nur auf die PK-Spalten.
Deswegen meine überlegung, dass das ja irgendwie steuerbar sein muss. (da ichs über den provider ja auch "steuern" kann).

11.08.2009 - 15:22 Uhr

verwendetes Datenbanksystem: <DB2>

Hallo Forum,
ich hab ein Problem beim erstellen des Updates aus dem DataAdapter:

Grundsätzlich funktioniert das Update schon, jedoch werden NUR die Spalten geändert, welche einen Primary-Key besitzen. (Bei Insert und Delete genauso).

Dann hab ich herausgefunden, dass mit einem Zusatz im Provider ich auch Spalten OHNE Primary-Key ändern kann (EXTCOLINFO=1).
Jedoch, wenn ich eine Tabelle bearbeiten möchte, die überhaupt keinen Schlüssel besitzt geht das nicht. Da kommt dann folgende Fehler meldung:


Dynamische SQL-Generierung für den UpdateCommand wird nicht für einen SelectCommand unterstützt, der keine Schlüsselspalteninformationen zurückgibt.

Hier mal mein Code fürs Login + Anzeigen


vConnODBC = new OdbcConnection("Driver={Client Access ODBC Driver (32-bit)}" +
                                                      "; System = " + vLogIn.System +
                                                      "; UID = " + vLogIn.User +
                                                      "; PWD = " + vLogIn.Password +
                                                      "; DBQ = " + vLogIn.Library +
                                                      "; EXTCOLINFO=1");

vDS = new DataSet();

 // Inhalt ins DataSet
vTab.Fill(vDS);

// Daten anzeigen
tbl_File.DataSource = vDS.Tables[0];

Hier mein Code fürs Update


OdbcCommandBuilder vCommand = new OdbcCommandBuilder(vTab);

vTab.UpdateCommand = vCommand.GetUpdateCommand();
vTab.UpdateCommand.Prepare();
vTab.Update(vDS);

Ich hoffe, dass jemand schon mal das gleiche Problem hatte und eine Lösung dazu 😃
Bin für jeden Tipp dankbar.

lg Andi