Laden...
D
DjBepy myCSharp.de - Member
Dipl. Wirtschaftsinformatiker / DB Operator Dabei seit 10.04.2006 209 Beiträge
Benutzerbeschreibung

Forenbeiträge von DjBepy Ingesamt 209 Beiträge

06.12.2016 - 13:00 Uhr

Die Ticker-Variable selber ist int & wird dem Feld im DataTable direkt zugewiesen.

Ich habe gerade Mal den Start Wert des Tickers auf 1000 gesetzt & jetzt sortiert er "korrekt".

Kann ich dem Feld irgendwie explizit sagen, dass es ein INT-Feld ist?

06.12.2016 - 12:22 Uhr

Hallo 😃

Ich habe eine Liste von Mitarbeitern mit Angaben, an welchen Tagen die da und an welchen die nicht da sind in einer DataTable gespeichert. Diese Liste benötige ich um den Dienst-Plan zu erstellen.

Sobald ein Mitarbeiter für den Dienst gesetzt wurde, soll er "ans Ende" der Liste gesetzt werden, damit erst alle Anderen wieder dran kommen. Dafür habe ich ein Column "Ticker" der mit jedem Eintrag hoch gezählt wird

Sobald einer ausgewählt wird, wird der Ticker wieder um eins erhöht und in den Ticker-Eintrag des ausgewählten Mitarbeiter geschrieben. Danach wird die Liste mit

dtHotline.DefaultView.Sort = "Ticker ASC";
                                dtHotline = dtHotline.DefaultView.ToTable();

wieder neu sortiert.

Das funktioniert auch genau so lange, bis der Wert im Feld Ticker die 10 erreicht. Danach bleibt der Eintrag mit dem Ticker 10 & aufwärts immer an erster Stelle in der DataTable, so als wenn er nicht nummerisch sortiert, sondern die 1 der 10 halt kleiner als die 9 des anderen Eintrag ist.

Ich hatte ursprünglich über die Anzahl sortiert, jedoch wird ein Mitarbeiter nach dem Urlaub dann erst mal x Mal eingesetzt, bis er auf dem gleichen Stand ist wie der Rest und das ist nicht gewollt.

Jemand eine Idee? Ich bin auch für andere (funktionierende) Lösungsansätze offen 😃

02.03.2011 - 15:01 Uhr

So, Lösung gefunden: Es lag wirklich an der Buffer-Größe. Wenn ich die jetzt mit 32*1024 übergebe, dann geht es auch in 1,5Min 😃

02.03.2011 - 14:47 Uhr

[zitat entfernt]
Habe ich schon Versucht. Ich muss zuvor ein Ordner auf dem FTP-Server erstellen, in das die Dateien kopiert werden sollen. Wenn ich das mache, dann bekomme ich beim Upload-Versuch über WebClient die Meldung vom Server "530: Befehle in falscher reihenfolge gesendet" 😦

Aber ich versuche es jetzt mal, in dem ich den Buffer erhöhe . . . .

02.03.2011 - 11:02 Uhr

Ahoi zusammen 😃

ich habe bei mir ein FTP-Upload eingebaut:

public void UploadFile(string strgOrdnerName, string localFilePath, Int32 bufferSize)
        {
            string strgUri = "ftp://" + Properties.Settings.Default.strgFtpServerInek + "/" + strgOrdnerName+"/"+Path.GetFileName(localFilePath);
            System.Net.FtpWebRequest ftpDatenUpload = (FtpWebRequest)System.Net.FtpWebRequest.Create(new Uri(strgUri));
            ftpDatenUpload.Credentials = new NetworkCredential(Properties.Settings.Default.strgFtpUserinek, Properties.Settings.Default.strgFtpPasswortInek);

            if (bufferSize < 1) bufferSize = 1024;

            FileStream tempStream = new FileStream(localFilePath, FileMode.Open);
            byte[] buffer = new byte[bufferSize];
            Int64 noOfBuffers = tempStream.Length / Convert.ToInt64(bufferSize);//rundet automatisch ab
            Int32 lastBufferSize = Convert.ToInt32(tempStream.Length - noOfBuffers * bufferSize);

            ftpDatenUpload.Method = WebRequestMethods.Ftp.UploadFile;
            Stream ftpStream = ftpDatenUpload.GetRequestStream();

            //Buffer die komplett ausgelesen werden
            for (int i = 0; i < noOfBuffers; i++)
            {
                tempStream.Read(buffer, 0, buffer.Length);
                ftpStream.Write(buffer, 0, buffer.Length);
            }

            if (lastBufferSize > 0)
            {
                //letzter Buffer der nur zum Teil ausgelesen wird
                tempStream.Read(buffer, 0, lastBufferSize);
                ftpStream.Write(buffer, 0, lastBufferSize);
            }

            ftpStream.Close();
            tempStream.Close();
        }

Wenn ich darüber eine 10MB Datei hochlade dauert das etwa 7Min. Lade ich die gleiche Datei mit FileZilla hoch, dann dauert es nur 30Sekunden.

Woran liegt das?

P.S. Es ist genau die selbe Datei, der selbe Server und der selbe Rechner, auf dem es ausgeführt wird.

22.02.2011 - 09:45 Uhr

Ahoi zusammen 🙂

Ich habe ein nettes Frontend erstellt in dem teilweise 2 -3 Threads parallel laufen.

Jetzt habe ich ein "globales" Logbuch erstellt, auf das alle zugreifen:
Eine Static-Funktion in der Config-Klasse, die eine Text-Datei im CSV-Format füllt bzw. immer wieder eine Zeile anfügt.

Wie kann ich jetzt den Zugriff auf diese Klasse "puffern", für den Fall das 2 oder mehr Threads gleichzeitig versuchen ins Logbuch zu schreiben?

Ich bin jetzt auch nicht darauf epicht unbedingt den StreamWriter weiter zu nutzen. Aber wenn eine CSV-Datei am Ende dabei rum kommt wäre das super 😁 Jemand ne Idee?

Viele Grüße,
Benny!?!

15.02.2011 - 19:17 Uhr

Ich habe schon versucht so viel wie möglich zusammen zu fassen. Diese Form hat halt nur dutzende von Buttons/Menüs + Sichten und vieles wird über ein BackgroundWorker abgefrühstückt, damit die Form nicht einfriert 😉

Habe jetzt begonnen alle Zugrife auf irgendwelche Form-Elemente zu invoken und logge fleißig mit . . . vielleicht finde ich den schwarzen Peter ja auf die Art & Weise . . .

15.02.2011 - 15:07 Uhr

Wie kann ich VS sagen, er soll sich in ein laufendes Programm klemmen? Es kommt ja keine Fehlermeldung, so dass ich über Details oder so gucken könnte, es friert ja einfach ein & gut is . . . .

15.02.2011 - 14:00 Uhr

Ich habe jetzt am Anfang jeder Funktion die Funktion hinzugefügt, die den aktuellen Funktionsnamen ins Logbuch schreibt . . . so habe ich vielleicht ein Anhaltspunkt, ob es immer nach Ausführen einer bestimmten Funktion ist . . .

@mogel: Gerne, aber meine Hauptform hat 2659Zeilen Code, ich glaube, das sprengt etwas den Rahmen 😉

15.02.2011 - 10:55 Uhr

Ahoi 😃

Danke für den Hinweis.

Wenn Threads bzw. der BackgroundWorker genutzt wird, läuft alles Invoke.

Das komische an der Sache ist, das im Hintergrund nichts läuft. Teilweise ist aus der Hauptform einfach eine neue Form geöffnet, teilweise nicht.

Es wird dann vom User an CSV-Dateien gearbeitet, die ausm Explorer heraus geöffnet wurden. Nach der Bearbeitung will der User wieder zurück ins Programm, um eine neue Verarbeitung zu starten & PENG, geht nicht, Fom sind eingefroren.

Hatte schon überlegt ob es an der Browser-Komponente liegt, die ich als Explorer missbrauche & der versucht was zu aktuallisieren. Komplett raus genommen, gleiches Phänomen.

Auch habe ich die Funktionen zur Verbindung mit der DB in Try-catch gepackt, falls er versucht beim Focus die DataSource der DataDridView zu aktuallisieren, die Verbindung in ein Timeout gelaufen ist & er es nicht hin bekommt die neu aufzubauen. Hilft auch nicht.

Was mich ja so stuzig macht, ist dass es im DM vom VS ohne Probs rennt & gebaut laufend friert 😦

15.02.2011 - 10:19 Uhr

Ja, leider ist es egal ob ich ne Release- oder ne Debug-Version baue, das Ergebniss ist leider das Gleiche . . .

15.02.2011 - 09:37 Uhr

Ahoi 😃

Ich habe ein Prozess-Steuerungs-Software mit GUI gebaut. Wenn ich das Ganze im Febug-Modus von VS.NET 2010 laufen lasse, rennt die ohne Probleme.

Baue ich jetzt ein Realese und starte das auf div. Rechnern unter div. Usern (Win XP, User haben Admin-Rechte) passiert es laufend, das die Form einfriert, wenn se mal ne Zeit lang im Hintergrund liegt/minimiert ist und dann wieder in Fokus geholt werden soll.

Gibt es da bekannte Ursachen für? Wenn ich dem User VS installiere und das Ganze wieder im Debug-Modus starte, läuft es ohne Probleme 😦

23.12.2010 - 15:55 Uhr

Danke für die Antwort, jetzt geht es 😃

Es lag an AllowUserToAddRows = true 😃 Das komische jedoch war, dass die letzte Spalte nie leer war 😉 Ich fülle die ja "per Hand" bevor ich die Rows der anderen DataTables hinzufüge & die gefüllte Zeile wurde dann nach unten verschoben. Das war ja das komische. Wenn die immer leer gewesen wäre, hätte ich mir da eher ein Reim drauf machen können 😉

23.12.2010 - 14:58 Uhr

Ahoi zusammen 😃

Ich habe eine DataGridView mit vorgegeben Spalten. Wenn ich die Form aufrufe, wird diese je nach Status mit 1, 3 oder 4 Reihen befüllt.

Die erste Reihe gibt es irgendwie immer, selbst wenn ich

DataGridView.Rows.clear()

mache. Da stört im ersten Moment nicht, da die Basis der ersten Reihe ein Feld aus der DB ist, dass auf die Spalten aufgesplitet wird.

Die Reihen 2, 3 & 4 wiederrum rufe ich per DataTable einzeln aus der jeweiligen Tabelle der DB ab und übergebe die Row als ItemArray via

DataGridView.Rows.Add(DataTable.Rows[0].ItemArray)

.

Dabei passiert es jedoch, das diese Rows immer vor die Erste gespüllt werden. Sprich in der Reihefloge her kommt 2, 3, 4, 1. Jemand ne Idee wieso das so ist bzw. wie ich das ändern kann?

Ich habe auch schon versucht alles in eine DataTable zu schreiben & die dann via

DataGridView.DataSource = DataTable

zu binden, aber dann wird nur die eine erste Zeile mit den Standardwerten gefüllt angezeigt, mehr nicht.

Jemand ne Idee?

P.S. Ja, ich habe kontrolliert, ob die DataTable auch wirklich gefüllt ist.

09.12.2010 - 11:12 Uhr

Danke @ MarsStein 😃

Damit kann der Thread als erledigt geschlossen werden 😃

09.12.2010 - 10:41 Uhr

Danke für deine konstruktive Kritik . . . wenn Du aber alles gelesen hättest, war es ledeglich ein Hinweis von mir, da in der IBM eigenen Software der / anstelle des . verwendet wird und nicht jeder so ein Schlauberger ist wie Du 😉

09.12.2010 - 10:15 Uhr

Ahoi 😃

Ich habe es jetzt endlich geschafft den .NET-Provider zu installieren bzw. zu erhalten. Über den kann man dann eine Verbindung zur AS400 aufbauen.

Bei der Angabe der DB + Tabelle in den Abfragen muss man die mit einem . von einander trennen und nicht wie in der Datenübertragungs-Software von IBM mit einem /

Für jeden, der damit auch mal Probleme hat, habe ich die DLL mal als Anhang beigefügt 😃

27.10.2010 - 10:29 Uhr

Seite 90 ist die Letzte & leer 😉

Ich würde gerne, aber ich finde den nicht . . . aber wie gesagt, laut Programmer's Toolkit ist der installiert, aber wenn ich das Toolkit starte kommt eine Fehlermeldung.

Ich bin jetzt im Dialog mit IBM, so dass die mir mal die neuste Version von der Client Access Software zukommen lassen . . . vielleicht erledigt sich der Fehler dann bzw. ich kann endlich den .NET Provider nutzen . . .

27.10.2010 - 08:51 Uhr

@TomLeech: Die ODBC-Verbindung habe ich doch -> IBMDA400. Und wie schon erwähnt funzt die ja auch unter Access, & Co . . . nur über .NET irgendwie nicht . . .

26.10.2010 - 15:06 Uhr

So, ich habe mich jetzt durch zich Seiten gewühlt & angeblich wird der .NET-Provider sowie als auch der OleDB-Provider mit der Installation vom ClientAccess installiert . . . laut Setup-Routine ist das auch installiert . . . nerv

26.10.2010 - 13:21 Uhr

Habe ich hier her:
http://www.connectionstrings.com/as-400#p61

Wenn ich System durch DSn ersetze kommt die Meldung, dass Ihm der Systemname fehlt . . . .

26.10.2010 - 12:31 Uhr

Ping geht, ich komme mit Access auf die AS400 drauf, ich kann mit dem ClientAccess-Datenübertratungstool auf die DB zugreifen . . .

26.10.2010 - 10:32 Uhr

Jo, die Befehle auf der Seite habe ich alle durch 😉

Wenn ich den OLDB Befehl nehme, behauptet er immer, dass er den Provider nicht finden kann (mein Urpsrungsproblem).

26.10.2010 - 09:10 Uhr

bzw. kann ich auch via OleDB auf die AS400 zugreifen? Wenn, wie sieht da der Verbindungsbefehl für aus?

26.10.2010 - 09:07 Uhr

Da war er, der Wald vor lauter Bäumen 😄

Habe dann jetzt auch den Verbindungsbefehl angepasst, aber leider kommt der nächste Fehler:

"ERROR [08S01] [IBM][iSeries Access ODBC-Treiber]Fehler bei Datenübertragungsverbindung. comm rc=11001 - CWBCO1004 - Auflösung der fernen Adresse nicht möglich"


System.Data.Odbc.OdbcConnection con = new System.Data.Odbc.OdbcConnection("Driver={Client Access ODBC Driver (32-bit)};System=IBMDA400;UID=" + Properties.Settings.Default.strgAS400User + ";PWD=" + Properties.Settings.Default.strgAS400Passwort + ";Default Collection = "+Properties.Settings.Default.strgAS400Db +";");

Wenn ich mich z.B. mit Access via ODBC auf die DB einklinke, läuft alles super . . . jemand ne Idee?

25.10.2010 - 15:34 Uhr

verwendetes Datenbanksystem: IBM As400

Ahoi, da meien Suche nichts gebracht hat, versuche es mal mit nem eigenen Ticket.

Ich versuche eine ODBC-Verbindung zu einer AS400 aufzubauen.

den ClientAccess ODBC-Treiber habe ich installiert & auch in der Benutzer-DSN eine Verbindung namens IBMDA400 eingerichtet.

Jetzt versuche ich die Verbindung aufzubauen bzw. die Daten einer Tabelle abzurufen und als Meldung erhalte ich immer:

"Der 'IBMDA400'-Provider ist nicht auf dem lokalen Computer registriert."

Hier mein QC:

System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection("Driver={Client Access ODBC Driver (32-bit)};Provider=IBMDA400;User ID=" + Properties.Settings.Default.strgAs400User + ";Password=" + Properties.Settings.Default.strgAs400Passwort + ";Default Collection = "+Properties.Settings.Default.strgAs400Db+";");

            System.Data.OleDb.OleDbDataAdapter daDatenAusDerAbfrage = new System.Data.OleDb.OleDbDataAdapter();

            DataTable dtDatenAusDerAbfrage = new DataTable();

            daDatenAusDerAbfrage.SelectCommand = new System.Data.OleDb.OleDbCommand("SELECT * FROM imp_kh", con);
            System.Data.OleDb.OleDbCommandBuilder cbDatenAusDerAbfrage = new System.Data.OleDb.OleDbCommandBuilder(daDatenAusDerAbfrage);
            daDatenAusDerAbfrage.Fill(dtDatenAusDerAbfrage); // hier tritt die Exception auf

Sehe ich den Wald vor lauter Bäumen nicht oder was mache ich falsch?

Schon Mal Danke für die Hilfe.

17.09.2010 - 13:59 Uhr

Da war mein Eifer mal wieder schneller. Aber das klingt nach einer eleganten Lösung 😃

Ich habe jetzt die CSV2DataTable-Funktion mal so erweitert, dass man ein Feld mit statischem Inhalt an einer beliebigen Stelle einfügen kann. So habe ich das Problem mit dem Index ändern nicht . . .

17.09.2010 - 11:31 Uhr

verwendetes Datenbanksystem: SQL Server 2k

Ahoi zusammen 😃

Ich möchte den Inhalt einer CSV-Datei in die DB schieben. Ich habe eine Klasse, die mir wahlweise die CSV_Datei direkt in die DB schreibt oder eine Datatable draus erstellt sowie eine, die mir die DataTable in die DB schiebt. Funzt auch alles super.

Jetzt ist es aber so, dass das Feld JobNummer nicht in der CSV-Datei steckt, sondern nur im Namen. Ergo ich würde aus der CSV-Datei ein DataTable machen & dann die fehlende Spalte hinzufügen. Da aber die DataTable2DB-Funktion den Inhalt Spalte für Spalte in die DB hämmert, spielt natürlich die Reihenfolge eine Rolle.

Im Notfall muss ich eben die Tabelle der DB anpassen. Das will ich aber vermeiden, da die JobNummer ein Teil des Prim-Schlüssel ist und diese Felder nach unserer Defintion immer am Anfang der Tabelle stehen.

Ergo, ich muss die Spaltenreihenfolge der DataTable anpassen. Nur wie? Oder kann ich über eine Schleife die einzelnen Spalten samt Inhalt aus der einen DataTable raus in eine neue kopieren? Bin für alle Ideen offen . . . .

22.12.2009 - 20:01 Uhr

So, habe mal von OleDB auf SqlClient umgestellt . . .. selbes Phänomen 😦
Mal debugged? Breakpoint in "Ausführen" und schauen ob du da landest? Connection-String geprüft (richtige Datenbank?)?

Das ist immer das Erste was ich mache 😦 Ich benutze die selbe Klasse, um SP mit nur einem Int-Wert auszuführen & bei denen funktioniert es ohne Probleme. Daher gehe ich davon aus,dass es irgendwas mit den anderen Parametern zu tun hat 😦 Aber ich bin schon Step für Step durch & gepfüft, ob auch immer der richtige Wert & Co übergeben wird. Das stimmt alles . . . .

22.12.2009 - 15:47 Uhr

So, aheb mal von OleDB auf SqlClient umgestellt . . .. selbes Phänomen 😦

22.12.2009 - 15:28 Uhr

Habe OleDB genommen, weil ich nicht weiß, was für DBs da irgendwann hintergrund sitzen. Spielt das denn im Bezug auf die SP eine Rolle?

Hmm, Profiler sagt mir spontan nichts.

22.12.2009 - 14:42 Uhr

Es gibt auch keine Exception . . . die SP läuft durch. Jedoch ist die Anzahl der effected Rows = 0 & eigentlich müsste es ja 1 sein 😦

Habe jetzt schon bissl rum gespielt & gesagt, wenn es ein Integer ist, dann keine Länge übergeben . . . weil vielelicht mag er das nicht . . . ändert aber auch nichts 😦

Hier meine SP-Klasse:

class StoreProcedureAusfuehren
    {
        OleDbConnection conStoreProcedure = new OleDbConnection();
        OleDbCommand ocStoreProcedure = new OleDbCommand();

        public StoreProcedureAusfuehren()
        {
            conStoreProcedure.ConnectionString = Properties.Settings.Default.strgDbConnectionString;
            ocStoreProcedure.Connection = conStoreProcedure;
            ocStoreProcedure.CommandType = System.Data.CommandType.StoredProcedure;
        }

        public int Ausfuehren(string strgStoreProcedureName)
        {
            ocStoreProcedure.CommandText = strgStoreProcedureName;
            conStoreProcedure.Open();
            int intAnzahlBetroffenerEintraege = ocStoreProcedure.ExecuteNonQuery();
            conStoreProcedure.Close();

            return intAnzahlBetroffenerEintraege;
        }

        public void AddParameter(string strgParameterName, string strgParameterWert, OleDbType odbtDatentyp)
        {
            if (odbtDatentyp == OleDbType.Integer)
            {
                ocStoreProcedure.Parameters.Add(strgParameterName, odbtDatentyp);
            }
            else
            {
                ocStoreProcedure.Parameters.Add(strgParameterName, odbtDatentyp, strgParameterWert.Length);
            }
            ocStoreProcedure.Parameters[strgParameterName].Value = strgParameterWert;
        }

        public void ClearParameter()
        {
            ocStoreProcedure.Parameters.Clear();
        }
    }

Und so rufe ich das Ganze dann auf:

StoreProcedureAusfuehren spaEinzelFallStorno = new StoreProcedureAusfuehren();
                                                spaEinzelFallStorno.AddParameter("@ik", drAktuelleZeile["fg_ik"].ToString(), OleDbType.Integer);
                                                spaEinzelFallStorno.AddParameter("@standort", drAktuelleZeile["fg_standort"].ToString(), OleDbType.Char);
                                                spaEinzelFallStorno.AddParameter("@entgeltbereich", drAktuelleZeile["fg_entgeltbereich"].ToString(), OleDbType.Char);
                                                spaEinzelFallStorno.AddParameter("@fallnummer", drAktuelleZeile["fg_fallnummer"].ToString(), OleDbType.VarChar);
                                                spaEinzelFallStorno.Ausfuehren(Properties.Settings.Default.strgSpEinzelLeistungsFallStorno);

                                                spaEinzelFallStorno = null;

Und wenn ich dann in die Funktion Ausfuehren springen ist "intAnzahlBetroffenerEintraege " immer 0 😦

Sieht jemand den Wald?

22.12.2009 - 13:36 Uhr

hmm . .. so gehts irgendwie auch nicht . . . dabei steht es so in der MSDN http://msdn.microsoft.com/en-us/library/yy6y35y8%28VS.71%29.aspx:

ocStoreProcedure.Parameters.Add(strgParameterName, odbtDatentyp, strgParameterWert.Length);
            ocStoreProcedure.Parameters[strgParameterName].Value = strgParameterWert;

Wo ist denn nun der Wald wieder? 😦

22.12.2009 - 13:25 Uhr

Hmm, und wie übergebe ich das Ganze in C#?

Ich habe das hinzufügen der Parameter aktuell so gelöst:

public void AddParameter(string strgParameterName, string strgParameterWert, OleDbType odbtDatentyp)
        {
            ocStoreProcedure.Parameters.AddWithValue(strgParameterName, strgParameterWert);
            ocStoreProcedure.Parameters[strgParameterName].OleDbType = odbtDatentyp;
            ocStoreProcedure.Parameters[strgParameterName].Precision = (byte)strgParameterWert.Length;
        }

Wobei "Precision " scheinbar nicht die Zahl in Klammern ist, die in SQL hinter dem Datentyp in Klammern steht.

Wo lege ich denn das fest?

22.12.2009 - 13:12 Uhr

Da war er wieder, der Wald vor lauter Bäumen . . . 😄

Danke für die Hilfe . . . wenn ich das in der Test-Abfrage anpasse geht es auf einmal 😉

Wundert mich nur, warum der doofe Assistent vom Querry Analyser das nciht automatisch macht argh

22.12.2009 - 11:56 Uhr

Auch die Datentypen stimmen:

1	jo_id	int	4	0
0	fg_ik	int	4	0
0	fg_standort	char	2	0
0	fg_entgeltbereich	char	3	0
0	fg_fallnummer	varchar	15	0
0	fg_aufnahmeanlass	char	1	1
0	fg_aufnahmegrund	char	4	1
0	fg_angenommen	char	5	1
0	fg_storno	char	1	1
22.12.2009 - 11:54 Uhr

Habe gerade händisch nachgeguckt, der Datensatz existiert in der DB (wie im ersten Post schon agezeigt). Habe nochmal nachgesehen, es existieren nirgendwo Leerzeichen in den Feldern.

Die Spalten-Namen stimmen auch:

jo_id    fg_ik    fg_standort    fg_entgeltbereich    fg_fallnummer    fg_aufnahmeanlass    fg_aufnahmeanlass    fg_angenommen    fg_storno
800374    260100012    00    DRG    Fall_10001    N    0107    False    N

Sprich, den Variablen sind die richtigen Werte zugewiesen (oder sehe ich das falsch?).

Welchen Punkt auf der Checkliste habe ich vergessen?

22.12.2009 - 11:41 Uhr

Nö . . . sprich, er kann nichts updaten, weil er nichts findet . . . jetzt ist die Frage, warum findet er nichts? 😦

22.12.2009 - 11:27 Uhr

verwendetes Datenbanksystem: MS SQL Server 2000

Ahoi zusammen 😃

Ich habe mir mehrere Update-SP gebastelt und alle bis auf Einer funktioniert. Der Unterschied des Einen zu den Anderen ist, dass ich mehr als nur einen Parameter mit auf den Weg gebe:

REATE PROCEDURE [delete_Ein_LeistungsFall]
	(@ik 	[int],
	 @standort 	[char],
	 @entgeltbereich 	[char],
	 @fallnummer 	[varchar])

AS UPDATE [VerwaltungsDB2009].[dbo].[Fall_Geliefert] 

SET  [fg_storno]	 = 'J'

WHERE 
	( [fg_ik]	 = @ik AND
	 [fg_standort]	 = @standort AND
	 [fg_entgeltbereich]	 = @entgeltbereich AND
	 [fg_fallnummer]	 = @fallnummer)
GO

Egal ob ich das via C#oder Test-Weise im Query Anlayser laufen lassen, als Antwort kommt immer "0 Rows effekt", obwohl es ein Eintrag dazu in der Tabelle gibt.

DECLARE @RC int
DECLARE @ik int
DECLARE @standort varchar(1)
DECLARE @entgeltbereich varchar(1)
DECLARE @fallnummer varchar(1)
SELECT @ik = 260100012
SELECT @standort = '00'
SELECT @entgeltbereich = 'DRG'
SELECT @fallnummer = 'Fall_10001'
EXEC @RC = [VerwaltungsDB2009].[dbo].[delete_Ein_LeistungsFall] @ik, @standort, @entgeltbereich, @fallnummer
DECLARE @PrnLine nvarchar(4000)
PRINT 'Gespeicherte Prozedur: VerwaltungsDB2009.dbo.delete_Ein_LeistungsFall'
SELECT @PrnLine = '	Rückgabecode = ' + CONVERT(nvarchar, @RC)
PRINT @PrnLine
800374	260100012	00	DRG	Fall_10001	N	0107	False	N

Die SP habe ich vorsichtshalber nochmal mit dem Assistenten erstellen lassen, damit auch alle Datentypen & Co richtig gesetzt werden.

Jemand ne Idee, was ich falsch mache?

15.12.2009 - 20:39 Uhr

Alter Schwede, das war ne Geburt . . . ich habs 😄

Ich muss den Text mit den RTF-Steuerzeichen hinterlegen & dann nicht via SelectedRtf = sonder mit SelectedText = "TextErsetzung" übergeben & siehe da, es gibt Zeilenumbrüche 😄

15.12.2009 - 20:36 Uhr

Wenn ich den Post richtig verstehe, geht es darum,die RTF-Steuerzeichen in einen Text einzubetten, so dass aus einem blank Text ein RTF-Text wird, richtig?

Wenn, dann verstehe ich den Wink nicht, da ich ja schon versuchte habe den Text in RTF gespeichert (sprich mit RTF-Steuerzeichen) hinterlegt habe & es leider den selben Effekt brachte, wie ohne Stuerzeichen 😦

Wenn nicht, dann bitte ich um ein weiteren Wink 😉

15.12.2009 - 20:13 Uhr

Ahoi zusammen 😃

Ich verzweifele gerade ein wenig 😦

Ich habe ein kleinen sagen wir eMail-Editor gebastelt. Dafür können Mail-Vorlagen gespeichert werden. In den Mailvorlagen können Platzhalter wie Name & Co eingetragen werden. Rufe ich die Vorlage dann auf, suche ich die Stelle raus (richTextBox.find), markliere die (richTextBox.Select) und ersetze das dann durch die entsprechenden Daten aus der DB (richTextBoy.SelectedText =).

Funktioniert auch alles super.

Jetzt, geht es darum, je nach Absender, ein anderen Text (in der Regel unten) als "Visitenkarte" dran zu hängen. Und da komme ich nicht weiter, denn der Text hat Zeilenumbrüche & die werden vollkommen ignoriert. Egal ob ich dem Text an der Stelle "\n" oder "\r\n" oder als Array & dann Zeile für Zeile mit System.Enviorment.NewLine als Text mitgebe oder den Text in RTF (spricht mit RTF-Steuerzeichen) speichere und via SelctedRtf einspiele, der Text wird einfach wie auf ner Schur aufgereiht & hin geklatscht 😦

Da der Text in der Regelunten ist, habe ich das Unten mal als Gegeben angesehen und wenn ich auf den Platzhalter dafür stoße, wird der Platzhalter-Text raus gelöscht & dann der Text mit += angefügt . . . egal ob richTextBox. Text oder .Rtf, es wird dann einfach nichts ausgegeben . . .

Jemand ne Idee?

15.12.2009 - 15:54 Uhr

Ich weiß nicht, ob das Problem schon gelöst wurde, aber man kann in eine richTextBox auf 2 Arten Text an der Curser-Position einfügen:
.SelectedText =
.SelectedRtf =

Je nach, ob der einzufügende Text mit RTF-Steuerzeichen ist oder "blank".

02.12.2009 - 13:03 Uhr

verwendetes Datenbanksystem: Lotus Notes Mailbox / NotesSQL

Ahoi zusammen 😃

Ich versuche Attachments aus einer Lotus Notes MailBox zu ziehen.

Ich weiß, es gibt die API, mit der habe ich es auch schon hin bekommen. Das Problem ist, die API ist sehr instabil und verwendet immer den Lotus Notes Client. Beim Abrufen über die API wird jedes 2te mal eine leere Liste zurückgegeben oder der LotusNotes Client schmiert ab, obwohl die ganze Routine in einem Try-Catch-Block sitzt.

Da ich vom Client unabhängig auf die Mails zugreifen will, habe ich mir NotesSQL installiert und baue jetzt die Verbindung via ODBC auf. Das Notes kein User-Namen via Übergabe akzeptiert, sondern man die Option weglassen muss, damit der Windows-User genommen wird, habe ich schon akzeptiert. Dass die Überagbe eines Passwortes sinnlos ist & trotzdem ein Fenster mit Passwortabfrage aufgehet habe ich bereits geschluckt.

So, die Verbindung steht, ich kann mir die Mails im Unterordner anzeigen lassen. Beim Anzeigen der Mails wird jedoch nur (ich vermute) die ID, Lieferdatum, Betreff, und Absende-Namen (nicht Absende-Mail) angezeigt. Aber wie komme ich jetzt an die Absende-Adresse, den Mail-Text & viel wichtiger den Anhang ran?

Jemand Erfahrungen in die Richtung bzw. ne Lösungen parat?

24.11.2009 - 15:27 Uhr

Es funzt, nur halt nicht im Debugger 😦

Aber gut, habe ich jetzt umgestrickt, so dass erst der OFD gestartet wird & das Ergbniss dann an den BW als Start-Argument übergeben wird . . . Danke 😃

24.11.2009 - 15:03 Uhr

Ahoi zusammen 😃

Ich öffne innerhalb eines BW den OpenFileDialog und erhalte folgende Meldung:
"Für den aktuellen Thread muss der STA-Modus (Single Thread Apartment) festgelegt werden, bevor OLE-Aufrufe ausgeführt werden können. Stellen Sie sicher, dass die Hauptfunktion mit STAThreadAttribute gekennzeichnet ist. Diese Ausnahme wird nur ausgelöst, wenn ein Debugger mit dem Prozess verbunden ist."

Nach bissl rum gesuche scheint es daran zu liegen, dass ich das Ganze als STAThread "deklarieren" muss. Nur wie kann ich das dem BW erzählen?

18.11.2009 - 14:25 Uhr

So, habe jetzt wieder auf Socket umgestellt und dank WireSharkk den Fehler gefunden: Die .NET-Routine war der As400 zu schnell 😉 Scheinbar hat die Routine schon versucht Daten fürn Upload zu senden während die AS400 noch mit dem eigentlich Login zugange war.

Wenn ich jetzt zwischen den ganzen Steps ein Thread.Sleep(1000) einbaue läuft es ohne Probleme 😃 Muss mal gucken, ob es auch eleganter geht 😉

Ich poste jetzt nicht mein ganzen QC, aber ich habe mich am QC des Posts FTP-Bibliothek ganz unten orientiert 😃

Danke für Eure Unterstützung 😃

18.11.2009 - 12:00 Uhr

Ich habe mal bissl weiter geforscht . . . für mein Benutzter ist auf der AS400 ein bestimmtes VZ hinterlegt, da loggt er sich quasi automatsich ein, ohne dass ich es anegeben muss:

"FTP Request: PWD
FTP Response: 257 "DRGDST" is current library."

Dann soll er in das darin liegende Unterverzeichnis springen & dabei hakt es scheninbar:

"FTP Request: CWD DRGDST/drgdsttrf/
FTP [TCP Out-Of-Order] Response: 257 "DRGDST" is current library.
FTP Response: 501 Specified object name too long, limit is 10 characters: drgdsttrf//."

Sprich, ich müsste (wie beim Socket) das VZ separat switchen können . . . ich glaube, ich versuche es nochmal mit dem Socket . . . jetzt wo ich Wireshark habe, finde ich vielleicht darüber den Fehler 😉

18.11.2009 - 10:48 Uhr

Hallo Tom,

das war das Erste was ich getan habe 😉 Der String wird normal übergeben ftp://server/verzeichnis/dateiname 😦

18.11.2009 - 10:28 Uhr

So, den Transfer konnte ich mit Wireshark super nachverfolgen (Danke für den Tip).

Wie es scheint, hat er Probleme mit dem Verzeichnisnamen, da die auf der AS400 scheinbar auf 10Zeichen beschränkt sind:
"FTP Response: 501 Specified object name too long, limit is 10 characters: drgdsttrf//."

Warum .NET da aber ein // am Ende noch hin setzt kann ich nicht nachvollziehen 😦