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 Trekki1990
Thema: [gelöst] OBD(II) über seriell bedienen
Am im Forum: Rund um die Programmierung

Zum Thema Hyundai: https://stackoverflow.com/questions/57306799/how-to-decode-obd-2-data-from-hyundai-ioniq-ev

Die Ausgabe aus meinem Tool passt wohl so. Nur kommt da als Rückgabe nicht "41" sondern die IDs der Steuergeräte "7EC" und dann die Nutzdaten.

Ich habe das Gefühl die Jungs bei Hyundai wollen nicht dass man "rumschnüffelt" und selbst irgendwas "baut" für den OBD Port.

Gruß
trekki

Thema: [gelöst] OBD(II) über seriell bedienen
Am im Forum: Rund um die Programmierung

@trib...

Ich bin jetzt schlauer. Ich habe das eben an dem gewünschten anderen Auto ausprobiert. Da funktioniert alles wie es soll!

Ich gebe ein: 01 5C (Öltemperatur °C)
und erhalte: 41 5C XX

Ich gebe ein: 01 2f (Tankinhalt %)
und erhalte: 41 2f XX

Ich gebe ein: 01 46 (Außentemperatur °C)
und erhalte: 41 46 XX

Die bei Hyundai müssen irgendwas anders machen... Keine Ahnung.

Da ich die Werte nicht im Millisekundenbereich abfragen will, reicht mir hier alle 10 Sekunden. Ich verbinde das einfach mit einem Timer. Für meine kleine "Quick and Dirty" Lösung reicht mir das.

Danke an alle, für den letzten Denkanstoß. ;)
Bzgl. Puffer werde ich mir dann noch mal ansehen.

VG
trekki

Thema: [gelöst] OBD(II) über seriell bedienen
Am im Forum: Rund um die Programmierung

Hallo Trib,

danke für deine ausführliche Nachricht!
In der Zwischenzeit (vor deinem Post) habe ich ein wenig rumprobiert.

Als ich das Thread.Sleep eingebaut hab, wurden die Daten nicht mehr zerstückelt und ich kann die einzelnen Einträge als items in einer Liste speichern wo man dann das Analysieren anfangen könnte:


Thread.Sleep(500); 
            var serialPort = (SerialPort)sender;

            int buffSize = 4096;
            byte[] bff = new byte[buffSize];
            string data = string.Empty;
            data += System.Text.Encoding.Default.GetString(bff, 0, serialPort.Read(bff, 0, buffSize));

            data_list = data.Split(new char[] { '\r' }, StringSplitOptions.RemoveEmptyEntries);

            foreach (string d in data_list)
            {
                if (txt_filter.Text != "")
                {
                    if (d.Contains(txt_filter.Text)) txt_receive.AppendText(d + "\n");
                }
                else
                {
                    txt_receive.AppendText(d + "\n");
                }
            }
            txt_receive.SelectionStart = txt_receive.Text.Length;
            txt_receive.ScrollToCaret();
        }

Habe jetzt nach deinem Post die einzelnen AT Kommandos mal ausprobiert.
Ich habe jetzt alles ausgeschaltet, also AT x0 und erhalte diese Nachrichten wie im hier zu sehen. Woher kommen denn immer noch diese 0:, 1:, 2: usw.?

15:59:53 - Befehl: 2101
7F2112
016
0:6101FFE00000
01E
0:6101000003FF
03D
0:6101FFFFFFFF
033
0:6101FFFFFBC0
1:09215A06061103
1:0C38004299D538
2:00000000E37534
1:BB172426480300
1:00023202320204
2:0000000A002502
3:04200000000000
2:040F530E0E0E0E
2:00007D003501BC
3:3D041939D0FFD0
3:05C04100000000
3:0E0E0E000FCC44
4:FF610000000000
4:00000000600000
4:CC010000900002
5:000001F4000001
5:3BEC00023AA900
6:A5000000000000
6:00D4300000CCD4
7:05BD0000000000
7:008371D60D0188
8:0000000003E800
>


Die PID 2101 - 2105 werden dazu genutzt um die einzelnen Batteriezellenspannungen auszulesen (sollte halt mir nur als Beispiel dienen um die Thematik grundsätzlich zu verstehen). Als Testobjekt nutze ich meinen Hyundai IONIQ electric. Der kann nämlich die ganze Zeit ohne Probleme eingeschaltet in der Garage stehen. :D

Das ATH1 hatte ich mit Absicht gesetzt, da ohne die Header nicht ersichtlich ist von welchem Steuergerät die Daten kommen, so viel mir das Filtern leichter.

Gruß
trekki

Thema: [gelöst] OBD(II) über seriell bedienen
Am im Forum: Rund um die Programmierung

Hallo Martin, ach Gott ist das peinlich X(
Ich haue ja bei Putty schön auf ENTER... Danke. dafür!

Jetzt kommen die Ergebnisse. Ich habe anscheinend jetzt noch ein Formatierungsproblem. Wie bekomme ich denn jetzt die CAN Messages als Byte Array in eine Liste um die zu analysieren? Er spuckt mir die ja teilweise zerhackt oder an einem Stück aus...

Liegt es eventuell an der Methode wie ich die Daten hole?

serialPort.ReadExisting();

Muss ich hier wie bei der Eingabe prüfen ob ein CRLF dazwischen liegt?

VG
trekki

Thema: [gelöst] OBD(II) über seriell bedienen
Am im Forum: Rund um die Programmierung

Hallo und guten Morgen!

Ich habe mir mal wieder ein kleines Hobbyprojekt auferlegt.
Ziel ist es, mir eine eigene Multimediaoberfläche im Star Trek Stil (LCARS) zu bauen. Eingebaut wird das ganze im Doppel-DIN Schacht meines Kfz (Subaru BRZ, BJ. 2016).
Ich möchte auch weiterhin einige Live Werte meines Kfz über die OBD Schnittstelle auslesen. Dabei ist mir inzwischen bewusst wie das mit dem CAN BUS funktioniert. Ich schicke einen Request und das entsprechende Steuergerät antwortet.

Folgende Werte möchte ich dann auf meiner eigenen Oberfläche darstellen (Balkendiagramme usw.):

    - Außentemperatur (°C)
    - verbleibende Treibstoffmenge (%)
    - Motoröltemperatur (°C)

Am OBD Port meines Kfz steckt ein OBDII Bluetooth Modul, dass bereits mit einer Android App aus dem Playstore wunderbar zusammenarbeitet und ich bekomme auch die oben genannten Werte ausgelesen. Also grundsätzlich funktionell.

Ich habe dann den OBD Adapter mit meinem PC verbunden. Registriert hat sich der Dongle auf COM4. Habe mir eine kleine Test GUI geschrieben, die mir serielle Kommunikation ermöglicht. An der Stelle habe ich jetzt mein Problem. Wenn ich das Ganze mit Putty steuere, bekomme ich entsprechend korrekte Antworten zurück. Gebe ich beispielsweise den Befehl "ATZ" ein bekomme ich die ELM Version zurückgeliefert. Mache ich das mit meinem Tool, dann bekomme ich nur "?>". Wenn ich jedoch mit einem COM Port Emulator zwei Ports paare und schicke in Putty etwas los, kommt es in meinem Tool ohne Probleme an.

Anbei meine Methoden zum Senden und Empfangen:


private void btn_send_Click(object sender, EventArgs e)
{
    if (port.IsOpen == true) port.Write(txt_send.Text);
    else txt_receive.AppendText(DateTime.Now.ToLongTimeString() + " - Port ist nicht geöffnet!\r\n");
}


private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    var serialPort = (SerialPort)sender;
    var data = serialPort.ReadExisting();

    txt_receive.AppendText(DateTime.Now.ToLongTimeString() + " - " + data + "\r\n");
}

Anbei habe ich noch einen Screenshot um zu verdeutlichen was ich meine. Wäre über einen Denkanstoß sehr dankbar.

VG
trekki

Thema: [gelöst] RegEx: eine Art 'exakte' Suche
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke für eure guten Tipps!
Konnte es jetzt zu meiner Zufriedenheit lösen.
Das Pattern sieht folgendermaßen aus:

(STRING) - |((U_|U_TEW-)STRING)$

VG
trekki

Thema: [gelöst] RegEx: eine Art 'exakte' Suche
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo liebe Gemeinde,

es ist gar nicht so leicht einen Titel für einen RegEx Thread zu finden ;)
Habe folgende Konstellation an Daten (AD-Gruppen):


DBG_Q-A - Abteilung ABCDEFGH
DBG_Q-A-F - Abteilung ABCDEFGH
DBG_Q-A-F1 - Abteilung ABCDEFGH
DBG_Q-A-M - Abteilung ABCDEFGH
U_Q-A
U_Q-A-F
U_Q-A-F1


Suchstring ist: Q-A-F
Pattern ist: (Q-A-F)\W|(Q-A-F)$
Herauskommen die Gruppen:


DBG_Q-A-F - Abteilung ABCDEFGH
U_Q-A-F


Soweit so gut. Suche ich jetzt aber nach "Q-A" um diese Gruppen zu bekommen:


DBG_Q-A - Abteilung ABCDEFGH
U_Q-A


Zeigt er mir ALLE die "Q-A" im Namen haben und nicht nur die zwei die ich eigentlich will.
Habe mit dem RegEx Tester von https://regex101.com/ schon ewig rumprobiert, aber komme zu keiner Lösung. Ist meine Anforderung überhaupt umzusetzen? Geht's vielleicht auch ohne RegEx?

Wäre für Denkanstöße dankbar.

PS: Ich prüfe immer nur einen Gruppennamen mit dem Pattern. Ich habe eine Liste aus Strings mit den ganzen AD-Gruppennamen. Iteriere die mit foreach durch und prüfe mit dem String ob die meinen Kriterien entspricht. Ist also nicht Multiline.

VG
trekki

Thema: ASP.NET - Process.Start() hängt fest
Am im Forum: Web-Technologien

@pinki: Exit Befehl hört sich schon mal gut an... Ich rufe mit dem Process.Start ja cmd.exe und die Argumente auf. Da steht kein exit dann irgendwo. Der Befehl, wie z.B. mkdir wird ja abgesendet und gleich umgesetzt. Ich kenn das aus Skriptdateien mit dem Exit damit die Konsolenfenster sich schließt. Muss ich mal näher untersuchen.

@Abt: Was spricht dagegen wenn es nur eine Intranetanwendung ist? Außerdem kann ich doch dem IIS App Pool jeden Nutzer zuweisen den ich will? Wird dann in diesem Nutzerkontext ausgeführt.

Gruß
trekki

Thema: ASP.NET - Process.Start() hängt fest
Am im Forum: Web-Technologien

Ich habe es noch mal etwas umgeschrieben, aber das Ergebnis ist genau das Gleiche, außer dass er nun bei

p.WaitForExit();

hängt.

Hier die andere Version:


protected void btn_execute_Click(object sender, EventArgs e)
        {
            try
            {
                var command = (from TOOLBOX
                               in ADWM_DB_SETTINGS.TOOLBOX
                               where TOOLBOX.AKTION == ddl_command.SelectedValue.ToString()
                               select TOOLBOX).First();

                string ex_command = command.ARGUMENTE;

                if (txt_host.Text != "") ex_command = ex_command.Replace("%HOST%", txt_host.Text);
                if (txt_arguments.Text != "") ex_command = ex_command.Replace("%PARAMETER%", txt_arguments.Text);
                ex_command = ex_command.Replace("%USERNAME%", adw.GET_SETTING("EWS_USER"));
                ex_command = ex_command.Replace("%PASSWORD%", adw.GET_SETTING("EWS_PASSWORD"));

                Process p = new Process();
                p.StartInfo.UseShellExecute = false;

                if (File.Exists(Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, @"Scripts\PStools\", command.PROGRAMM)))
                {
                    p.StartInfo.FileName = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, @"Scripts\PStools\", command.PROGRAMM);
                }
                else
                {
                    p.StartInfo.FileName = command.PROGRAMM;
                }

                p.StartInfo.Arguments = ex_command;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.CreateNoWindow = true;
                p.OutputDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
                p.ErrorDataReceived += new DataReceivedEventHandler(proc_OutputDataReceived);
                p.Start();
                p.BeginOutputReadLine();
                p.WaitForExit();

                /*StreamReader sr = p.StandardOutput;
                StreamReader sr_err = p.StandardError;
                string output = sr.ReadToEnd();
                string output_err = sr_err.ReadToEnd();
                p.WaitForExit();*/

                /*if (output != "") txt_console_ouput.Text = output;
                else txt_console_ouput.Text = output_err;*/
            }
            catch (Exception ex)
            {
                outputData.Append(ex.Message);
            }
            finally { txt_console_ouput.Text = outputData.ToString(); }
        }

        protected void proc_OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            if (e.Data != null)
            {
                outputData.AppendLine(e.Data.ToString());
            }
        }

Gruß
trekki

Thema: ASP.NET - Process.Start() hängt fest
Am im Forum: Web-Technologien

[ASP.NET]
[C#]

Hallo liebes Forum,

ich habe eine interne Webanwendung die verschiedene Prozesse starten kann.
Ich nutze hier die PStools für z.B. Abfragen welche Benutzer gerade an einem Host angemeldet sind etc.

Nun soll das Ganze flexibel sein, sodass man eigene Skripts zur Datenbank hinzufügen kann und eine Art Script Sammlung bekommt. Soll uns Admins die Arbeit ein wenig abnehmen.

Solange ich das mit den PStools mache funktioniert alles wie gewünscht. Ich erhalte nach dem abgesetzten Befehl auch den Output. Gebe ich nun das Programm "cmd.exe" an und übergebe Parameter bekomme ich von meiner Website keinen Response mehr und die Ladeanimation dreht sich zu Tode. Er hängt genau bei

string output = sr.ReadToEnd();

fest.

Ich hoffe ihr habt eine Idee.
Ich steige nicht ganz dahinter warum die CMD sich so anders verhält... Probiere schon seit Stunden :(

Hier mein Code wie ich die Prozesse starte:

 protected void btn_execute_Click(object sender, EventArgs e)
        {
            try
            {
                var command = (from TOOLBOX
                               in ADWM_DB_SETTINGS.TOOLBOX
                               where TOOLBOX.AKTION == ddl_command.SelectedValue.ToString()
                               select TOOLBOX).First();

                string ex_command = command.ARGUMENTE;

                if (txt_host.Text != "") ex_command = ex_command.Replace("%HOST%", txt_host.Text);
                if (txt_arguments.Text != "") ex_command = ex_command.Replace("%PARAMETER%", txt_arguments.Text);
                ex_command = ex_command.Replace("%USERNAME%", adw.GET_SETTING("EWS_USER"));
                ex_command = ex_command.Replace("%PASSWORD%", adw.GET_SETTING("EWS_PASSWORD"));

                Process p = new Process();
                p.StartInfo.UseShellExecute = false;

                if (File.Exists(Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, @"Scripts\PStools\", command.PROGRAMM)))
                {
                    p.StartInfo.FileName = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, @"Scripts\PStools\", command.PROGRAMM);
                }
                else
                {
                    p.StartInfo.FileName = command.PROGRAMM;
                }

                p.StartInfo.Arguments = ex_command;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.CreateNoWindow = true;
                p.Start();

                StreamReader sr = p.StandardOutput;
                StreamReader sr_err = p.StandardError;
                string output = sr.ReadToEnd();
                string output_err = sr_err.ReadToEnd();
                p.WaitForExit();

                if (output != "") txt_console_ouput.Text = output;
                else txt_console_ouput.Text = output_err;
            }
            catch (Exception ex)
            {
                txt_console_ouput.Text = ex.Message;
            }
        }

Grüße
trekki

Thema: [erledigt] Höhe in Pixel von DIV Element abfragen wo Höhe auf "Auto" festgelegt ist
Am im Forum: Web-Technologien

Ich habs! Ich hatte beim Footer ...

flex: 1 1 auto;

... statt ...

flex: 0 0 auto;

... stehen.

Hier mein korrigiertes CSS:

<style type="text/css">
        html, body, form {
            height:100%;
            margin: 1px;
            min-height:100%;
            overflow:hidden;
            font-family:'Open Sans';
        }

        form {
            display: flex;
            flex-direction: column;
        }

        .StickyHeader {
            flex: 0 0 auto;
        }

        .StickyContent {
            flex: 1 1 auto;
            overflow-y: scroll;
        }

        .StickyFooter {
            flex: 0 0 auto;
        }
</style>

HTML:
<html>
<body>
   <form runat="server">
      <div class="StickyHeader">HEADER FROM MASTERPAGE</div>
      <div class="StickyHeader">HEADER FROM CONTENT</div>
      <div class="StickyContent">CONTENT</div>
      <div class="StickyFooter">FOOTER</div>
   </form>
</body>
</html>

Danke für die Anregungen!

Gruß
trekki

Thema: [erledigt] Höhe in Pixel von DIV Element abfragen wo Höhe auf "Auto" festgelegt ist
Am im Forum: Web-Technologien

Ich habe jetzt im CSS BODY durch FORM ersetzt. Jetzt ist er fixiert. Aber auch nicht richtig. Wenn das DataGrid View so viel Daten enthält das es über das Browserfenster hinaus geht und gescrollt werden muss, ruscht der footer korrekt nach unten und bleibt da auch. Wird das DataGridView wieder kleiner, wandert der aber mit nach oben und es bleibt ein weißer Rand um unteren Ende. Muss ich hier noch was an den Flex Eigenschaften des Footers drehen?

Gruß
trekki

Thema: [erledigt] Höhe in Pixel von DIV Element abfragen wo Höhe auf "Auto" festgelegt ist
Am im Forum: Web-Technologien

Vielen Dank für eure Vorschläge. Der Tipp von david ist Bombe! Kannte ich vorher gar nicht. Hat auch schon geholfen. Nur habe ich jetzt ein seltsames Phänomen.

Das ist mein CSS:

<style type="text/css">
        html, body, form {
            height:100%;
            margin: 1px;
            min-height:100%;
            overflow:hidden;
        }

        body {
            display: flex;
            flex-direction: column;
        }

        .StickyHeader {
            flex: 0 0 auto;
        }

        .StickyContent {
            flex: 1 1 auto;
            overflow-y: scroll;
        }

        .StickyFooter {
            flex: 1 1 auto;
        }
    </style>

Das Layout passt. Ich habe das in einer simplen HTML-Datei vorher mir noch mal angeschaut. Wenn ich jetzt das Layout in meine ASPX Seite übertrage, haut es nicht hin. Der Footer ist nicht unten fixiert, sondern schließt direkt an den variablen Content unten an.

Ich habe herausgefunden dass es an dem FORM-Tag liegt. Wenn ich das entferne gehts. Das kann ich aber nicht entfernen, da ja sonst meine Servercontrols nicht mehr arbeiten.

Jetzt habe ich endlich eine Lösung und dann funkt einem wieder was anders dazwischen. Habt Ihr noch einen Tipp?

Gruß
trekki

Thema: [erledigt] Höhe in Pixel von DIV Element abfragen wo Höhe auf "Auto" festgelegt ist
Am im Forum: Web-Technologien

Ich bekomme es einfach nicht hin... Hier mal ein Bild wie ich es eigentlich benötige. Dabei ist der Footer das Problem. Mein Layout funktioniert mit einer fixen Größe des Headers gut. Aber das ist unpraktikabel bei dem Inhalt der dort angezeigt werden kann.

Bin relativ neu im Thema Webprogrammierung und tue mich mit CSS / Javascript und den Ganzen Zusammenhängen noch ein wenig schwer. Die normalen Windows Forms sind nichts dagegen.

Gruß
trekki

Thema: [erledigt] Höhe in Pixel von DIV Element abfragen wo Höhe auf "Auto" festgelegt ist
Am im Forum: Web-Technologien

... okay okay ... Ich hatte wirklich ein Brett vorm Kopf. Ans rendern habe ich überhaupt nicht gedacht. Werde ich wohl dann mit Javascript machen. Ich werde meine Lösung dann hier posten.

Gruß
trekki

Thema: [erledigt] Höhe in Pixel von DIV Element abfragen wo Höhe auf "Auto" festgelegt ist
Am im Forum: Web-Technologien

Hallo Abt, okay. Warum funktioniert dass dann wenn ich eine feste Pixelzahl festlege und die Abfrage? Es funktioniert nur nicht wenn die Container / Panel auf Auto Höhe stehen.

MrSparkle hast du einen Link oder ein Codeschnipsel der mir die Augen öffnet? In CSS? Wenn dann aber nur in Kombination mit CSS / Javascript wie Abt schreibt oder?

Gruß
trekki

Thema: [erledigt] Höhe in Pixel von DIV Element abfragen wo Höhe auf "Auto" festgelegt ist
Am im Forum: Web-Technologien

Hallo liebe Community,

ich versuche verzweifelt die Höhe eines DIV-Containers abzufragen, bei dem die Höhe auf "Auto" festgelegt ist. Ich erhalte immer "0". Habe den DIV-Container in ein ASP-Panel umgewandelt und habe genau das Selbe Verhalten. Ich versteh es nicht.

Ziel ist folgendes:
Ich habe ein Main DIV (oder Panel, ist ja egal) und der Abstand zum Rand soll dynamisch angepasst werden. Dabei soll der Abstand genau so hoch sein, wie die Höhe des anderes Footer DIVs / Panels.

Im Prinzip hatte ich mir das so gedacht:

main.Style["bottom"] = pnl_footer.Height.Value.ToString() + "px";

Ich erhalte aber sowohl bei der Höhe als auch der Breite immer "0".
Klärt mich mal einer auf? Wäre euch sehr verbunden...

Gruß
trekki

Thema: ASP.NET IISExpress keine Bilder auf Remote Client
Am im Forum: Web-Technologien

Danke für die Hinweise Abt.

1) Weiß ich, mir gings nur darum die Seite auch auf anderen produktiven Clients zu testen, um ein möglichst breites Spektrum an Test PCs zu haben.

2) ok.

3) Ist auch drin

Ich nutze WebForms. Ist doch für eine Intranetanwendung egal oder etwa nicht?

Gruß
trekki

Thema: ASP.NET IISExpress keine Bilder auf Remote Client
Am im Forum: Web-Technologien

Hallo liebe Community,

ich habe eine ASP.NET Anwendung im Visual Studio (2015) erstellt und nutze den integrierten IIS Express zum testen.

Auf meiner lokalen Entwicklermaschine klappt alles wunderbar. Ich habe dann die Seite auch zugänglich für andere im Netzwerk befindliche Maschinen gemacht. Auf diesen Maschinen werden aber Bilder nicht angezeigt. Wie kann das sein? Ich bin total ratlos... Habe die MIME Typen kontrolliert (bzgl. statischer Inhalt), aber da passt alles. Auch die Pfade im Quelltext passen. Was mir auffällt ist, dass wenn ich mir den Quelltext über den Browser der anderen Maschinen anschaue, die relativen Pfade der Bilder (PNG) nicht mit "~" beginnen, sondern gleich zu dem Bild zeigen. Also so:

Quelltext im VS:

... ImageURL="~/Images/user_add.png"

Quelltext an anderer Maschine im Browser:
... ImageURL="Images/user_add.png"

Habe ich was übersehen oder muss ich an meinem Projekt noch etwas einstellen?

Für Hinweise wäre ich dankbar.

Viele Grüße
trekki

[EDIT: 15.03.2017 - 13:31]
Mein Projekt liegt unter "C:\Projekte" ... kann das Probleme machen?
PS: meine Entwicklermaschine ist Windows 10 in einer Microsoft Domäne.

Thema: Einfacheren Weg gesucht für das Generieren von SQL Statements in C#
Am im Forum: Rund um die Programmierung

Vielen Dank für euren Denkanstoß! :)
Habe mich in LINQ eingelesen. Funktioniert super.

Viele Grüße
trekki

Thema: Einfacheren Weg gesucht für das Generieren von SQL Statements in C#
Am im Forum: Rund um die Programmierung

Hallo liebe Community,

ich habe eine Anwendung die Daten in eine SQL Datenbank (MS) schreibt. Das habe ich bisher über Parameter gemacht. Das soll auch so bleiben. Nur ist mir das Tippen des SQL-Befehls zu aufwendig und fehleranfällig (Thema Kommas usw...). Ich habe mir eine Funktion gebaut die mir den SQL String zusammenbaut. Gibt's hier eine elegantere Lösung als die meine? Ich habe das Ganze auch dynamisch gehalten (mal 2 - 3 Paramater, aber auch viele mehr sind möglich), weil ich die Funktion in einer Klasse verwende.

Was auch nicht mit dieser Methode geht sind unterschiedliche Datentypen. So kann ich alles nur als String übergeben. Aber vielleicht habe ich hier generell einen Denkfehler oder den falschen Ansatz. Über Google habe ich schon viel gesucht, aber nicht wirklich etwas finden können, was mir weiterhilft.

So sieht meine Funktion aus:


// SQL Funktion INSERT
        public void SQL_INSERT_INTO(string table, string[] columns, string[] values, bool where, string where_command)
        {
            string col = "INSERT INTO " + table + " (";
            int col_anzahl_columns1 = columns.Length;
            foreach (string c in columns)
            {
                col = col + c;
                if (col_anzahl_columns1 > 1) col = col + ",";
                col_anzahl_columns1--;
            }

            col = col + ") VALUES (";

            int col_anzahl_columns2 = columns.Length;
            foreach (string c in columns)
            {
                col = col + "@" + c;
                if (col_anzahl_columns2 > 1) col = col + ",";
                col_anzahl_columns2--;
            }

            col = col + ")";

            if (where == true) col = col + " WHERE " + where_command;

            SqlConnection connection = new SqlConnection(sqlconnection);
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = col;
            cmd.Connection = connection;
            int i = 0;
            foreach (string v in values)
            {
                cmd.Parameters.AddWithValue("@" + columns[i], v.ToString());
                i++;
            }
            cmd.Connection.Open();
            cmd.ExecuteNonQuery();
            cmd.Connection.Close();
            cmd.Connection.Dispose();
        }

Viele Grüße
trekki

Thema: ASP.NET - Seite nicht editierbar wenn Content in Tabellenzelle in Masterpage
Am im Forum: Web-Technologien

Bzgl. Auslaufmodell: Soll nur für eine interne Intranetanwendung dienen. Ist also denke ich mal nicht so kritisch ;)

PS: Das Problem mit dem Designer hat sich leider nicht in Luft aufgelöst. Ich kann aber mit leben. Ich schreibe sowieso meistens direkt in der Source.

Kann also zu.

Gruß
trekki

Thema: ASP.NET - Seite nicht editierbar wenn Content in Tabellenzelle in Masterpage
Am im Forum: Web-Technologien

Hallo liebe Community,

ich habe mich die letzten Tage ein wenig in ASP.NET eingearbeitet.
Finde das echt super. Mir war das Potential dieser Technologie vorher gar nicht so bewusst.

Ich habe nun folgendes Problem:
Ich arbeite mit Visual Studio 2015. Habe mir eine Masterpage angelegt. In dieser Masterpage gibt es eine ASP-Tabelle. In dieser Tabelle gibt es diverse Zeilen und Spalten. Dazu habe ich noch eine WebForm die auf dieser Masterpage aufbaut. Der Inhalt der Webform soll dann in der einen freien Zelle der Masterpage angezeigt werden. Das funktioniert auch.

Nur ich kann dann im Designer nichts mehr an meiner Webform verändern. Es wird ein kleiner durchgestrichener Kreis angezeigt.

Quellcode von Masterseite:

<asp:TableCell runat="server" Width="100%" RowSpan="3" VerticalAlign="Top" BorderStyle="Solid" BorderColor="#999999" BorderWidth="1px">
                <div>
                    <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
        
                    </asp:ContentPlaceHolder>
                </div>
            </asp:TableCell>

Sollte ich anstatt der ASP-Table lieber eine normale HTML-Table verwenden? Mache ich hier grundlegend etwas falsch? Habe versucht Google zu benutzen, aber habe keinen passenden Suchstring finden können.

Viele Grüße
trekki

Thema: [gelöst] Remoteaufruf von PNPUTIL.exe mit PSexec funkioniert nicht
Am im Forum: Rund um die Programmierung

Hallo vielen Dank für deine Antwort Abt.
Ich habe es inzwischen anders lösen können. Ganz ohne ein Programm zu schreiben.

Anforderung: Veralteter Druckertreiber auf Windows 7 PC. Entfernen und neu hinzufügen des Netzwerkdruckers führt leider nicht zur Aktualisierung des Treibers. Alte Version wird weiterhin genutzt. Mit dem Script kopiere ich den neuen Treiber auf den PC, installiere einen lokalen Testdrucker mit dem neuen Treiber und lösche diesen wieder (dadurch wird die Aktualisierung des Treibers erzwungen). Netzwerkdrucker wieder installieren, alles schick :)

Wen es interessiert hier das Script (muss natürlich auf die eigene Umgebung angepasst werden).
Benötigt wird im selben Verzeichnis noch die PSEXEC.exe

BAT-File 1 für den Aufruf der ganzen Aktion (start_repair.cmd):


@echo off
cls

echo Bitte Computernamen oder IP Adresse eingeben:
set /p Computer=

copy repair.cmd \\%Computer%\C$
psexec.exe -u DOMAIN\USER -p PASSWORD \\%Computer% C:\repair.cmd

BAT-File 2 für die eigentliche "Reparatur" (repair.cmd):

@echo off
echo DRUCKERREPARATUR IM GANGE. BITTE NICHT UNTERBRECHEN!!!
echo Drucker DRUCKERNAME entfernen...
rundll32 printui.dll,PrintUIEntry /q /dn /n \\SERVER\DRUCKERFREIGABENAME
net stop spooler
pnputil -i -a "PFAD_ZUR_INF-DATEI"
net start spooler
rundll32 printui.dll,PrintUIEntry /if /b "Test_Printer" /f "PFAD_ZUR_INF-DATEI" /r "LPT1:" /m "DRUCKERMODELL_AUS_DER_INF_DATEI"
rundll32 printui.dll,PrintUIEntry /q /dl /n Test_Printer
echo Drucker DRUCKERNAME werden installiert...
rundll32 printui.dll,PrintUIEntry /q /in /n \\SERVER\DRUCKERFREIGABENAME
rundll32 printui.dll,PrintUIEntry /q /y /n \\SERVER\DRUCKERFREIGABENAME

Eventuell hilft dies dem einen oder anderen weiter.

Gruß trekki

Thema: [gelöst] Remoteaufruf von PNPUTIL.exe mit PSexec funkioniert nicht
Am im Forum: Rund um die Programmierung

Hallo,

ich versuche schon seit geraumer Zeit herauszufinden was nicht funktioniert.
Ich versuche mit folgendem Code einen Befehl über PSEXEC.exe an pnputil zu schicken.
Das funktioniert wohl auch, meine Anwendung schmeißt mir keine Exception. Das Konsolenfenster geht auf, aber dann passiert nix weiter.

Wenn ich den Befehl in der CMD manuell eingebe, funktioniert es so wie es soll.
Übersehe ich was?

Wäre für jeden Tipp dankbar. :)

Hier mein Code:


if (txt_pcnummer.Text != "")
            {
                try
                {
                    Process proc = new Process();

                    proc.StartInfo.UseShellExecute = false;
                    proc.StartInfo.RedirectStandardError = true;
                    proc.StartInfo.FileName = Path.GetTempPath() + @"\PsExec.exe";
                    proc.StartInfo.CreateNoWindow = false;
                    proc.StartInfo.Arguments = @" /accepteula \\" + txt_pcnummer.Text + @" -u DOMAIN\USER -p PASSWORD c:\windows\system32\pnputil.exe -e > c:\printDriver.txt";

                    proc.Start();

                    err = proc.StandardError.ReadToEnd();

                    proc.WaitForExit();
                    proc.Close();
                }
                catch (Exception ex) { MessageBox.Show(ex.Message + "\n\n" + err, "Error", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1); }
                finally { if (err != "") MessageBox.Show("Fehler: \n\n" + err); }
            }

Gruß trekki

Thema: [gelöst] Benutzer in andere OU verschieben bringt Fehler
Am im Forum: Rund um die Programmierung

Habe ich jetzt ... Asche auf mein Haupt.
Wenn ich den DN so schreibe:

"LDAP://CN="Müller, Hans",OU=Benutzer,OU=Knoten,OU=Firma,DC=ABC,DC=COM"

dann klappt es wunderbar.
Danke euch.

Gruß
trekki

Thema: [gelöst] Benutzer in andere OU verschieben bringt Fehler
Am im Forum: Rund um die Programmierung

Habe eben mit DSquery den Pfad geprüft. Alles okay.
Ich habe das dumme Gefühl dass das was mit der Authentifizierung zu tun hat :/

Gruß
trekki

Thema: [gelöst] Benutzer in andere OU verschieben bringt Fehler
Am im Forum: Rund um die Programmierung

Hallo Abt,

ich habe die Namen anonymisiert. Ich hätte da auch was ganz anderes hinschreiben können. Es ist definitiv eine OU.

Nur das Beispiel müsste ja so funktionieren. Kommt ja von MS selbst.
Außerdem teste ich momentan nur. Wollte überhaupt mal sehen wie ich einen Nutzer verschieben kann. Nutzer lasse ich ja auch ganz einfach über UserPrincipal anlegen. Nur mit dem Verschieben bin ich noch nicht dahinter gekommen.

Gruß
trekki

Thema: [gelöst] Benutzer in andere OU verschieben bringt Fehler
Am im Forum: Rund um die Programmierung

Oh Entschuldigung, das hatte ich ganz vergessen zu erwähnen.
Sobald ich die "MoveTo" Methode aufrufe.

Gruß
trekki

Thema: [gelöst] Benutzer in andere OU verschieben bringt Fehler
Am im Forum: Rund um die Programmierung

Hallo,

ich verzweifle hier schon seit ca. 1 Stunde.
Ich habe mit Hilfe von Microsoft

MSDN

die Funktion zum Verschieben eines Objektes im AD erstellt.
Leider wirft er mir immer wieder den Fehler:

Fehler
System.DirectoryServices.DirectoryServicesCOMException (0x80072032): Es wurde eine ungültige dn-Syntax angegeben.

Ich habe sämtliche Authentication Types probiert. Nichts. Jedes Mal das Selbe.
Mal mit Benutzername und Passwort, mal ohne. So sieht mein Code momentan aus:

DirectoryEntry newUser = new DirectoryEntry("LDAP://CN=Müller, Hans,OU=Benutzer,OU=Knoten,OU=Firma,DC=ABC,DC=COM", "user", "xxxxxx", AuthenticationTypes.Secure);
newUser.MoveTo(new DirectoryEntry("LDAP://OU=Abgelaufene-Benutzer,OU=Knoten,OU=Firma,DC=ABC,DC=COM"));

Habt ihr noch eine Idee?

Gruß
trekki