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 BerndFfm
Thema: Ideen für neues Online Handbuch
Am im Forum: Smalltalk

Hallo Herbivore,

die Steuerkommandos hatte ich mir früher mal ausgedacht als es noch kein HTML gab.
Hätte ich mir vielleicht patentieren lassen soll ;-)

Ich hatte überlegt sie zu ändern, aber wenn ich sie so lasse kann ich sie gut mit einem HTML- oder RTF-Editor bearbeiten. Also bleiben sie so.

Wenn ich HTML-Tags nehmen würde dann müsste ich zum Editieren einen Texteditor benutzen.

Mit Word arbeite ich nicht. Aber in TextControl könnte man auch Textmarkierungen definieren. Und sogar auch Sachen selber programmieren und einbauen.

WYSIWYG benutze ich zur Zeit beim Schreiben des Hilfetextes überhaupt nicht, wäre aber möglich.

Grüße Bernd

Thema: Ideen für neues Online Handbuch
Am im Forum: Smalltalk

Hallo herbivore,

die Anzahl der Ebenen im Inhaltsverzeichnis sind eigentlich unbegrenzt. Man kann das Inhaltsverzeichnis auch vergrößern (SplitContainer).

Die Markierungen im Text sind wie folgt :

[i1] = Überschrift Kapitel 1. Ebene
[i2] = Überschrift Kapitel 2. Ebene
[s:..] = Stichwort
[m:...] = Hilfe zu Menü
[f:...] = Hilfe zu Feld
[b:...] = Bildschirm oder Grafik

Ja, Webbrowser-Control. Das klappt gut außer dem Zoom-Befehl, da wird die Schrift holprig.

Eine Offline-Lösung, die genau zu der eingesetzten Version passt, finde ich langfristig auch besser. Jetzt, wo ich erstmal noch viel Text schreiben muss lass ich es erstmal Online. Das Umschalten ist keine große Sache, eher die Verteilung bei Installation und Updates.

Grüße Bernd

Thema: Ideen für neues Online Handbuch
Am im Forum: Smalltalk

Ich bin kein guter Verkäufer.

Ich kann nur die Sachen verkaufen von denen ich selber zu 100% überzeugt bin.

Die Killer-Funktion wäre es den Handbuchtext auf Knopfdruck zu erzeugen ;-)

Grüße Bernd

Thema: Ideen für neues Online Handbuch
Am im Forum: Smalltalk

Nach vielen Forschungen im Internet und im realen Leben habe ich nun folgendes gemacht :

Ein eigenes Online Handbuch programmiert, das kann folgendes :

- Resize und Vollbild
- Kontext-sensitiv
- Kann wie ein E-Book oder ein echtes Buch Kapitel für Kapitel gelesen werden
- Inhaltsverzeichnis mit 3 Ebenen
- Stichwortverzeichnis
- Suche
- Verweise im Text auf andere Textstellen möglich
- Bildschirm-Printscreens können einfach eingebunden werden

Das Design ist praktikabel konservativ wie meine Software halt so ist.

Der Test selbst wird mit einer Textverarbeitung erstellt wie Word, Wordpad oder TextControl.

Die Texte werden zur Zeit Online geladen, eine lokale Version die von CD oder Festplatte läuft ist möglich.

Könnte man sowas einzeln verkaufen ? Gefunden habe ich sowas nicht.

Grüße Bernd

Thema: Windows 10 beendet Konsole
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Oder die Anwendung in der DOS-Box starten. dann siehst Du die Meldungen.

Grüße Bernd

Thema: C# MySql - Problem mit Abfrage aus einer Datenbank
Am im Forum: Datentechnologien

Den Wert auf jeden Fall intern als int speichern und verarbeiten.

Nur zur Anzeige nach string wandeln.

int t2int = (int)dt.Rows[t2int][0];

Der Wert in der Datenbank kann auch NULL sein, das musst Du vorher abfragen wenn dieser Wert vorkommen kann.

Grüße Bernd

Thema: Daten in lokale DB fügen
Am im Forum: Datentechnologien

Zitat
Wie kann ich aber jetzt die Tabelle zu meiner lokalen DB fügen

Das kannst Du z.B. mit dem SQL Management Studio machen.

Ein kurzes Tutorial findest Du hier : http://download.seven-c.de/files/DatenbankenHowTo.htm

Grüße Bernd

Thema: Picturebox an Bildauschnitt anpassen
Am im Forum: GUI: Windows-Forms

Hallo Elias,

Wenn Du Width und Height veränderst dann verändert sich die Größe des Bitmap rechts und unten (Location 0,0 ist oben links).

Wenn Du Width und Location.X gleichzeitig ändert dann änderst sich der rechte Rand.

Grüße Bernd

Thema: MSSQL Local Db wirft "Server wurde nicht gefunden" auf anderen Rechnern
Am im Forum: Grundlagen von C#

Es gibt folgende Möglichkeiten :

  • SQL Server Express installieren
  • SQLite verwenden
  • SQL Compact verwenden


Die beiden letzten sind Embedded Database Server die keine eigene Installation benötigen, es genügt 1 oder 2 oder 11 DLL's mitzugeben.

Siehe auch http://download.seven-c.de/files/DatenbankenHowTo.htm#10 Kapitel 10

Grüße Bernd

Thema: Frohe wünsche für das Jahr 2016
Am im Forum: Smalltalk

Hallo,

ich wünsche auch allen Mitgliedern von myCSharp ein Frohes Neues Jahr mit wenig Bugs und wenig Timeouts !

Grüße Bernd

Thema: WinForms - Stichworte/Tutorial für eine Datenbankverbindung
Am im Forum: Datentechnologien

Hallo gokho87,

deine Daten kannst Du in SQLite, SQL Compact, SQL Express, XML oder in einer Konfigurationsdatei speichern.

Hier eine kurze Einführung : http://download.seven-c.de/files/DatenbankenHowTo.htm

Grüße Bernd

Thema: [Erledigt] "Long Varchar" (Char[]) in SQL-Datenbank speichern – ADO.NET
Am im Forum: Datentechnologien

using (DataSet ds1 = ds.GetChanges())
    {
    }

Ist überflüssig. Beim Update werden sowieso nur die geänderten Zeilen benutzt.
Zitat
Ich weiß, dass kann ich möglicherweise durch parametrisierte Befehle (sofern Gupta keinen Fehler hat) lösen.

Nein, die Parameter werden den Fehler nicht lösen. Aber sie haben andere Auswirkungen.
Ich finde auch zu beachten dass Sonderzeichen in Stringwerten wie ' oder " beim Gefrickel immer zu Problemen führen, bei Datumswerten werden Monat und Tag schnell verwechselt.

Wenn es nicht um Performance geht kannst Du auch alles per DataSet machen und nur den einen Wert per SQL-Kommando updaten :
update {db_DBKOMMPROTOKOLL} set {f_ANLAGEN} = ... where ID = @ID ...

Grüße Bernd

Thema: [Erledigt] "Long Varchar" (Char[]) in SQL-Datenbank speichern – ADO.NET
Am im Forum: Datentechnologien

Hallo René,

Gupta gibt das Mapping von ihrem Datentyp Long Varchar mit char[] in .NET ab, probier das doch erstmal.
char[] wird in .NET nicht automatisch in string gecastet, deshalb die Fehlermeldung wenn Du das probierst.

char[] val = "Test".ToCharArray();
ds.Tables[db_DBKOMMPROTOKOLL].Rows[0][f_ANLAGEN] = val;

Meiner Meinung nach ist die Verwendung von DataSet und DataTable OK, ist ja so in .NET vorgesehen.

Es ist auch möglich dass der ADO.NET Treiber von Gupta Fehler enthält und ein Update von Long Varchar nicht funktioniert. Frag mal im Gupta Forum nach.

Probier mal den Datentyp Long Varchar nur zu lesen und beim Update wegzulassen.

Wenn das alles nicht geht dann musst Du das Update-Kommando selber bauen. Bitte mit Parametern.

Grüße Bernd

Thema: Text in Textbox immer sichtbar
Am im Forum: GUI: Windows-Forms

Hallo Renato,

einen Bildlauf zum Cursor erreichst Du mit

textBox1.ScrollToCaret();

Ob damit der aktuelle Text sichtbar wird der sich vielleicht unter dem virtuellen Keyboard befindet kann ich Dir nicht sagen. Eventuell die Textbox verkleinern so dass kein Bereich abgedeckt wird.

Grüße Bernd

Thema: Alle installierten Programme auslesen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ein Antivirenprogramm durchsucht typischerweise die gesamte Festplatte bzw. alle lokalen Festplatten nach allen ausführbaren Dateien. Dauert etwas, ist aber das sicherste.

Grüße Bernd

Thema: Vorhandener Report als PDF speichern
Am im Forum: Rund um die Programmierung

Hallo Timiboy,

Du weist die Daten einmal 'report' und einmal 'lr', das ist einmal zuviel.

'report' benutzt Du um den Report zu testen und anzuzeigen ?

Wieso schreibst Du dann diesen Report nicht in das PDF ?

byte[] bytes = report.LocalReport.Render("PDF", deviceinfo, out mimeType, out encoding, out extension, out streamids, out warnings);
FileStream fs = new FileStream(PdfDatei, FileMode.Create);
fs.Write(bytes, 0, bytes.Length);
fs.Close();

Es könnte am *using' liegen, dass der 'lr' am Ende nicht mehr verfügbar ist. Lass das mal weg.

Grüße Bernd

Thema: .NET Usergroup Frankfurt 16.Dezember : Daten in Echtzeit – Azure Stream Analytics
Am im Forum: Szenenews

Hallo,

wir laden Dich zum letzten User Group Meeting in diesem Jahr nach Bad Homburg ein. Bei unserem hoffentlich schönen Jahresausklang dreht sich diesmal alles um die Verarbeitung von Datenströmen. Wir freuen uns, wenn Du Lust hast, dabei zu sein, am

Mittwoch, 16. Dezember 2015 18:30 - 22:00
Daten in Echtzeit – Datenstromanalyse mit Azure Stream Analytics
Constantin "Kostja" Klein (http://kostjaklein.wordpress.com/)

Eine ständig wachsende Anzahl an Sensoren bringt uns dem „Internet der Dinge“ kontinuierlich näher. Anwendungen, die sehr schnell eine große Menge der erzeugten Daten verarbeiten, analysieren und mit Vorhersagemodellen kombinieren müssen, sind eine logische Konsequenz. Daraus ergeben sich aber eine Reihe von Fragen: Welche Herausforderungen verbergen sich in der Verarbeitung von Datenströmen? Welche Alternativen bietet der Microsoft-Kosmos zur In-Flight Datenverarbeitung und wie gelingt der Einstieg? Diesen Fragen wollen wir in dieser Session auf den Grund gehen und zusätzlich sehen wie mit Azure Stream Analytics ein neuer Cloud-Service bei dieser Problematik weiterhilft.
Wir freuen uns auf das letzte User Group Meeting in diesem Jahr. Es wird sicher ein schöner Jahresabschluss, welchen Ihr nicht verpassen solltet.

Im Anschluss an den Vortrag geht es wie gewohnt zum Networking ins Brauhaus. Dort gibt es bei einem kühlen Getränk und leckeren Speisen die Gelegenheit für vertiefende Gespräche und weiteren Austausch.

Der Beginn für das Meeting ist wie immer um 18:30 Uhr. Bitte um 18:15 anwesend sein.
Eine Anmeldung ist erforderlich, da die Plätze begtrenzt sind.
Anmeldung ab sofort unter: http://dnug-frankfurt.de/Event/tabid/119/ID/100/Default.aspx

Deine .NET User Group Frankfurt

Thema: Mail mit vordefinierten Werten und Anhang per MailTo-Cmd erstellen
Am im Forum: Office-Technologien

Hallo Tim,

Du kannst entweder einen eigenen Client schreiben der einen Anhang erlaubt,

oder Du kannst mit dem MAPI Protokoll wie folgt ein Email mit Dateianhang in Outlook erzeugen :

clsMAPI mapi = new clsMAPI();
mapi.AddRecipientTo(EmpfaengerEmail);
mapi.AddAttachment(Dateianhang);
mapi.AddAttachment(Dateianhang2);
mapi.SendMailPopup(subject, body);

Quelle : http://www.codeproject.com/Articles/17561/Programmatically-adding-attachments-to-emails-in-C

Grüße Bernd

Thema: Prüfen, ob eine Mobilfunkverbindung besteht (Cellular/Dethering)
Am im Forum: Netzwerktechnologien

Mit einem Trick kann man einige Funktionen des Phone-Frameworks und Windows-Store-Frameworks auch in Desktop-Applikationen verwenden. Vielleicht klappt das auch mit der Verbindung.

Siehe Reading Ultrabook Sensor Data with the Windows 8 Sensor API

Grüße Bernd

Thema: MySql Abfrage einer Date-Spalte nur nach Jahr
Am im Forum: Datentechnologien

Folgender Befehl funktioniert mit allen SQL-Datenbankservern :

SELECT max(build_nr) FROM `builds_table` WHERE `build_date` ≥ @VONDAT AND `build_date` ≤ @BISDAT

Die Parameter wie folgt belegen :
@VONDAT = 01.01.2014
@BISDAT = 31.12.2014

Grüße Bernd

Thema: Datenbank-Wahl für kleines Büro mit Sicherung zu Hause
Am im Forum: Datentechnologien

Ich würde auch SQL Express verwenden.

Du kannst alle Daten im laufenden Betrieb sichern mit einem SQL Befehl :

backup database ... to disk = ...

Zuhause kannst Du die Sicherung in eine Datenbank einlesen mit :
restore database ... from disk = ...

Zuhause darfst Du dann allerdings keine Änderungen an den Daten vornehmen.

Grüße Bernd

Thema: Bereits geöffnete Datenbankverbindung Programmübergreifend nutzen
Am im Forum: Datentechnologien

Hallo Thomas,

eine Datenbank Connection immer nur so lange wie nötig und so kurz wie möglich öffnen. Also nie längere Zeit geöffnet halten.

Siehe [Artikel] Ressourcen schonen - Datenbanken richtig öffnen und schließen

Dein Hauptprogramm sollte die Eigenschaften der Datenbank und den genauen Connectionstring nicht kennen.

Grüße Bernd

Thema: Programm geht nicht mehr
Am im Forum: Grundlagen von C#

Bitte überprüfe die Punkte die in der FAQ angegeben sind :

[FAQ] Programm läuft in anderer Umgebung nicht (richtig)

Wenn möglich per Debugger überprüfen oder durch Ausgaben (Logging) überprüfen ob Dein Programm ausgeführt wird. Fehlermöglichkeiten abfangen.

Grüße Bernd

Thema: MessageBox wird auf fremden Rechner nicht angezeigt
Am im Forum: GUI: Windows-Forms

Hallo Robert,

bau Dir eine eigene Messagebox mit einem modalen Dialog, ist eh schöner.

Trotzdem ist das nur ein Workaround und die tatsächlichen Ursachen sollte man schon erforschen.

Grüße Bernd

Thema: Sperren auf SQL Server blockieren System
Am im Forum: Datentechnologien

Hallo Red Baron,

Zitat von RED-BARON
ich denke Du wirst nicht der einzige sein der lesend und gleichzeitig
schreibend auf eine Tabelle zugreift.

Das dachte ich auch.
Zitat
Seltsam auch, es soll nur eine Installation betreffen was das Problem anbelangt.

Es liegt an der Verteilung der Daten in der Datenbank. Wenn ich in der betroffenen Tabelle jeden Datensatz ändere, dann kann ich mit meiner Routine keinen Time-Out mehr erzeugen. Dann ist die Verteilung der Rows auf die Pages geändert worden.
Zitat
Wenn tatsächlich keine Transaktion für die Updates benutzt wird, wieso
bleiben dann die Sperren bestehen. Einzelne Befehle werden doch atomar
ausgeführt, nach meinem Verständnis.

Wenn man keine Transaktion angibt dann packt der SQL Server jeden einzelnen Befehl in eine eigene Transaktion.
Zitat
db.ExecuteSQL(sqlstr, par) schließt die Verbindung nach jedem Schreibvorgang wieder ?

Klar !
Zitat
Wenn genau das hilft muss auf der Kundendatenbank ein isolierter Update-Befehl
eine Sperre erzeugen und diese muss bestehen bleiben.

Ja, erzeugt eine Sperre, nein, die bleibt nicht bestehen.
Zitat
Hast Du schon mal Probiert im Managment Studio eine Zeile der Tabelle zu aktualisieren und anschließend im selben Abfrage Fenster zu lesen ?
Vorher auch das IsolationsLevel so setzen wie Du es per Default von dem
in der App verwendeten Provider erwartest.
Das selbe auf einer Kundeninstallation ausführen wo bisher das Problem noch
nicht aufgetreten ist.

Ja, geht alles.
Zitat
Nicht das es irgendwo eine Einstellung pro Datenbank gibt, die ein solches
Default - Isolation Level setzen läßt !

Das weiß ich nicht, ich setze das aber lieber per C# Kommando.

Der Grund für die Sperre ist ja die Art der Verteilung der Table Rows in einer Page und der Übergang vom Row Lock zum Page Lock genannt "Lock Escalation".

"Beabsichtigte Sperren werden aus zwei Gründen verwendet:
...
Um die Effizienz des Database Engine (Datenbankmodul) beim Erkennen von Sperrkonflikten auf einer höheren Granularitätsebene zu steigern."

Quelle : https://msdn.microsoft.com/de-de/library/jj856598(v=sql.120).aspx

Weitere Infos zu Sperren : http://db-berater.blogspot.de/2014/06/sperrverhalten-von-shared-locks.html

Lock Escalation in SQL Server : https://msdn.microsoft.com/en-us/library/ms184286.aspx

Grüße Bernd

Thema: Sperren auf SQL Server blockieren System
Am im Forum: Datentechnologien

Hallo Red Baron,

Zitat von RED-BARON
Was ist an der Zeile neu ? Die komplette Zeile oder nur das ".Commit()" ?

Die ganze Zeile ist neu.
Zitat
Mein Verständnis sagt mir, da wird eine Transaktion gestartet und sofort wieder beendet. Eigentlich nutzlos.

Fast nutzlos. Sie ändert den Isolation Level der aktiven Connection von ReadCommited auf ReadUncommitted, d.h. bei Sperren wird nicht gewartet.
Zitat
Was liefert ReadRowsReadOnly für einen Typ zurück ?

IEnumerable<DataObjectsEinzelStatistik>. DataObjectsEinzelStatistik ist eine Klasse die eine Tabelle aus der Datenbank darstellt. Man kann also mit foreach alle Zeilen einer Tabelle der Datenbank durchgehen.

Das Ganze ist ein selbstgeschriebener ORM, um schnell und komfortabel auf Datenbanken zuzugreifen.
Beispiel für das Addieren aller Umsätze aller Statistiken :

double umsatz = 0;
DataCollectionEinzelStatistik esc = new DataCollectionEinzelStatistik();
foreach (DataObjectsEinzelStatistik es in esc.ReadRowsReadOnly("select * from es order by es_nr"))
{
    umsatz += es.umsatz;
}
Zitat
Wenn der Lesevorgang komplett abgeschlossen wurde bevor foreach durch die
Objekte iteriert wäre das m.E. nach übersichtlicher.

Das geht nicht da ggf. mehrere Millionen Datensätze geladen werden und wenn man die auf einmal lädt geht das sicher schief. Das ist ja gerade der Vorteil von DataReader und yield, dass man beliebig große Datenmengen damit verarbeiten kann.
Zitat
Leider ist aus der Methode (Auszug? ) nicht zu erkennen wann eine Transaktion
beginnt und wann sie endet.

Es wurde keine Transaktion benutzt bzw. die Benutzung ist irrelevant.

Grüße Bernd

Thema: Sperren auf SQL Server blockieren System
Am im Forum: Datentechnologien

Update (vielleicht gelöst) :

Ich habe eine Routine geschrieben die alle Werte einer Tabelle nacheinander liest (select ...) und Werte ggf. korrigiert (update ...). Bei dieser Routine bekomme ich nur bei einer bestimmten Kunden-Datenbank auch Time Outs.

Es geht rein um sequentielles Lesen und paarmal Ändern. Nur ein User. Keine großen Transaktionen. Wie kann das sein ?

Der Programmteil :

private void EinzelstatistikPruefen()
{
	DataCollectionEinzelStatistik esc = new DataCollectionEinzelStatistik();
	foreach (DataObjectsEinzelStatistik es in esc.ReadRowsReadOnly("select * from es order by es_nr"))	// Hier steckt ein DataReader dahinter
	{
		DataObjectsArtikel ar = new DataObjectsArtikel(es.arnr);
		double umsatz = es.ep * es.menge;
		if (es.umsatz != umsatz)
		{
				sqlstr = "update es set [email protected]_umsatz where es_nr = @es_nr";
				par = db.CreateParameterCollection("@es_nr", es.nr, "@es_umsatz", umsatz);
				db.ExecuteSQL(sqlstr, par);
		}
	}
}

Hinter "ReadRowsReadOnly()" steckt ein einfacher DataReader. ExecuteSQL führt das übergebene SQL-Kommando aus.

Ich habe mit einem Bekannten alle Server-Logs und Transaktion-Logs überprüft und folgendes festgestellt :

Beim Update-Befehl macht der SQL-Server ein ROW-Locking. Werden jetzt in einer PAGE viele Zeilen gelockt ändert das der SQL Server in ein PAGE-Locking, um den Verwaltungsaufwand niedrig zu halten. Beim PAGE-Locking werden aber auch Zeilen gelockt die in meiner Schleife noch nicht gelesen wurden. Der DataReader läuft also auf eine gesperrte Zeile und wartet darauf dass sie freigegeben wird.

Der DataReader in ADO.NET liest immer im Modus "Read Committed", Dirty Reads sind also erstmal nicht möglich.

Folgende Zeile habe ich zwischen Erzeugung der Connection und Ausführung des SQL-Kommandos eingefügt :

conn.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted).Commit();

Der Teil der den SQL-Befehl ausführt sieht nun so aus :

DBConnection conn = CreateConnection(db);
DbCommand cmd = CreateCommand(sqlstr, conn, db.DbProvider, par);
cmd.Connection.Open();
conn.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted).Commit();   // neu 
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

Jetzt klappt es !!!!!

Zumindestens diese eine Routine läuft jetzt bei mir. Ob damit alles Routinen beim Kunden laufen weiß ich noch nicht.

Grüße Bernd

Thema: .NET Usergroup Frankfurt : Everything you can do, I can do meta (Golo Roden)
Am im Forum: Szenenews

Das Treffen wird leider aus persönlichen Gründen abgesagt, einen neuen Termin gibt es Kürze.

Das nächste reguläre User Group Meeting findet damit am 22.10.2015 zum Thema Windows 10 statt. Bitte merke Dir bei Interesse diesen Termin schon vor. Die Einladung folgt in Kürze.

Thema: SQL Server: Problem beim lesen von BLOB-Werten
Am im Forum: Datentechnologien

Die Datenbankspalte kannst Du direkt einen Byte-Array zuweisen.

Also

 byte[] daten = (byte[])reader["Datenfeld"];

Hast Du ja in Deiner Variante 4 auch geschrieben. Das sollte immer funktionieren.

Das klappt bei uns mit SQL Server 2005, 2008, 2012 und 2015.

OleDB ist eine ganz schlechte Idee, da klappt fast nichts und es ist sehr langsam dazu.

Bei Dir scheint es sich ja um OLE-Objekte zu handeln, da ist das Lesen aufwändiger :

Saving OLE Object as Image Datatype in SQL

Grüße Bernd

Thema: fertige WPF RichTextBox gesucht
Am im Forum: GUI: WPF und XAML

Hallo,

ich nutze auch TextControl, sowohl die freie als auch die Profi-Version, das läuft sehr gut !

Grüße Bernd