Hallo,
irgendwie stehe ich aufm Schlauch, ich habe einen Text in einer MSSQL Datenbank, diesen lese ich in einen String ein und weise dann einer Textbox den Text zu, die Textbox zeigt den Text auch an, allerdings macht keinen Zeilenumbruch sondern zeigt \r\n an und ich versteht nicht warum. Ich hoffe das zählt nicht unter Grundlagen fragen 😕
Vielen Dank im vorraus.
Maffi
Hallo Maffi1986,
hast du schon geschaut wie der String im Debugger aussieht? In VS kannst du als Debugger-Visualizer "Text" wählen -- siehe angehängtes Bild.
Es könnte sein, dass vom SQL Server ein String in nicht erwarteter Kodierung kommt.
Multiline ist bei der Textbox auch angestellt?
Das folgende wird nichts bringen, aber eine Versuch wäre es wert:
Wenns dort richtig ist, nur in der TextBox nicht, so ersetze \r\n
durch Environment.NewLine
. Ob das etwas bringt bezweifle ich aber, denn unter Windows entspricht Environment.NewLine gerade \r\n.
Ebenso probiers nur mit \n.
Unter welcher Infrastruktur läuft deine Anwendung, denn bei mir (Win7 64bit, DEU, .net 4.5) gehts mit \n \r\n immer.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo gfoidll,
ich habe das mit Enviroment.NewLine probiert, funktion aber nicht weil es ja im String steht und durch + dazwischen gefügt wird.
So lese ich die Daten aus
string gewerbeText,privatText;
cmd.CommandText = "Select Art,Text from fusstexte;";
rdr = cmd.ExecuteReader();
int i = 0;
while (rdr.Read())
{
if (i==0)
{
gewerbeText = Convert.ToString(rdr[1]);
i++;
}
if (i==1)
{
privatText = rdr[1].ToString();
}
}
rdr.Close();
MSSQL.Close();
Ich nutze VS Community 2015 unter Windows 10 und Windows 7. Ich verstehe auch nicht, warum er das nicht macht. Ich denke mir bleibt nix übrig als den String zu Splitten und ....."+Enviroment.NewLine+"..... einzufügen, allerdings scheint mir das nicht die beste Lösung zu sein. Eigentlich müsste das auch anders funktonieren. Multiline ist aktiviert, in der string Variable wird \r\n angezeigt. Vielleicht ist es einfach zu Spät um klar denken zu können 😁
Vielen Dank Maffi
Hi,
also für mich schaut der Text eher nach "\r\n" aus. Sonst würde im Text nicht "\r\n" stehen und die Umbrüche würden einfach ignoriert werden, wenn es sich tatsächlich um ein Problem mit der Darstellung der Zeilenumbrüche handeln würde.
Wenn das so in der TextBox angezeigt wird, dann steht es auch so im String drin, d.h. nicht die beiden Steuerzeichen CR + LF, sondern die 4 Zeichen '', 'r', '' und 'n'.
Ersetze also einfach @"\r" durch "\r" und @"\n" durch "\n":
s = s.Replace(@"\r", "\r");
s = s.Replace(@"\n", "\n");
Wenn du nicht weißt, was das @ bedeutet: [FAQ] Was bedeutet das @ (=at) vor String-Literalen? Und: Wissenswertes zu Escape-Sequenzen (alternativ statt @"" kannst du also auch "\" schreiben).
Edit: da aber anscheinend verschiedene Zeilenumbrüche im Text vorkommen, und die Windows-TextBox nur CRLF unterstützt, müßtest du also auch noch '\n' und "\n\r" durch Enviroment.NewLine ("\r\n") ersetzen.
PS: Da schien der Datenbank-Anwendungsentwickler aber ganz schlau gewesen zu sein, daß er dort die Steuerzeichen im Text beim Eintragen in die DB ersetzt hat (oder gibt irgendein Anwender oder externes Programm den Text so ein?) 😉
Hallo,
irgendwie funktioniert das auch nicht. Im String stehen ja die Steuerzeichen drin.
Anbei mal ein Bild wie es in der Datenbank steht.
Viele Grüße
Hallo Maffi1986,
dort stehen sie "escaped", daher die doppelten Backslash. (Das hättest du nach meinem ersten Post schon feststellen können.
Wenn du nur \n
hast, so sollte es gehen.
Also string.Replace("\\n", "\n")
.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo gfoidl,
vielen Dank für die antwort, ich habe das nur Testweise so eingetragen, sowohl \ als auch \ haben den gleichen effeckt, ich fass hier nochmal etwas detailierter zusammen
Text in der SQL Datenbank
Mit erhalt der Ware bestätige ich, dass vorgehaltene Material mein persöhnliches Eigentum war. \n Wir weisen Sie darauf hin, dass jede Tätigkeit zur Erzielung von Einnahmen zur Umsatzsteuer- \\n und Einkommenssteuerpflicht führen kann. Klären Sie dies mit Ihrem Finazamt oder Steuerberater
Im Text steht sowohl \ als auch \, beides funktioniert leider nicht
So lese ich den Text aus, und füge Ihn zur Textbox hinzu.
cmd.CommandText = "Select Text from fusstexte WHERE Art=Privat;";
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
gewerbeText = Convert.ToString(rdr[1]);
}
rdr.Close();
MSSQL.Close();
tb_Freitext.Text = gewerbeText;
Im Anhang dann das ergbnis.
Viele Grüße und vielen Dank
Maffi
IIRC musst Du hier Replace mit Environment.NewLine
verwenden.
zB
tb_Freitext.Text = gewerbeText.Replace("\n", Environment.NewLine);
Könnte in diesem Fall natürlich auch \n sein, das ersetzt werden muss.
Funktioniert jedenfalls bei mir.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code