Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - SQL CE (Compact) 4.0 Problem Update mit Umlauten


Marc Dirk - Sa 13.04.13 00:44
Titel: SQL CE (Compact) 4.0 Problem Update mit Umlauten
Hallo Ihr Lieben!

Ich habe nach langer Zeit mal wieder ein kniffliges Problem. :autsch:

Aus meiner richTextBox heraus schreibe ich die Rtf-Daten in meine SQL-CE Datenbank. Bis hier her alles o.K. Auch wenn Umlaute im Text vorkommen.
Den gleichen Datensatz wieder aufgerufen, nichts geändert oder ergänzt, löst das Update der Tabelle eine Exception aus.
Lösche ich beim ändern in der richTextBox nun die Umlaute raus, dann klappt alles wieder bestens.

Kennt jemand den Fehler und hat eine Idee?

Hier mein Code-Schnipsel:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
if (global_string.AufgabeSender == "ribbonButton_AufgabeBearbeiten_Click")
{
   global_string.SqlCommandText = "UPDATE Aufgabe SET Aufgabe_Text = '" + ExtRichTextBox_Aufgabenbeschreibung.Rtf + "', Änderungsdatum = GetDate() WHERE ID_Aufgabe = '" + ID_Aufgabe + "'";
   
   proc_write_to_database(global_string.ConnectionString, global_string.SqlCommandText);
}

if (global_string.AufgabeSender == "ribbonButton_NeueAufgabe_MultipleChoice_Click")
{
                
   global_string.SqlCommandText = "INSERT INTO Aufgabe (Gültigkeit, ID_Aufgabe, ID_Fach, ID_Schule, Aufgabe_Text, Aufgabentypus, Phase, Erstellungsdatum, Änderungsdatum) VALUES ('true','" + New_ID_Aufgabe + "','" + ID_Fach + "','" + ID_Schule + "','" + ExtRichTextBox_Aufgabenbeschreibung.Rtf + "','1','1',GetDate(),GetDate())";
   
   proc_write_to_database(global_string.ConnectionString, global_string.SqlCommandText);
}


private void proc_write_to_database(string string_ConnectionString, string string_SqlCommandText)
{
   SqlCeConnection obj_SqlCeConnection = null;
   try
   {
      obj_SqlCeConnection = new SqlCeConnection(string_ConnectionString);
      obj_SqlCeConnection.Open();
      SqlCeCommand obj_SqlCeCommand = obj_SqlCeConnection.CreateCommand();
      obj_SqlCeCommand.CommandText = string_SqlCommandText;
      obj_SqlCeCommand.ExecuteNonQuery();
   }
   catch (Exception ex)
   {
      MessageBox.Show(ex.ToString());
   }
   finally
   {
      obj_SqlCeConnection.Close();
   }


Th69 - Sa 13.04.13 08:55

Hallo Marc Dirk,

wie lautet denn genau die Exception?

P.S. Beim Zugriff auf die Datenbank solltest du SQL-Parameter benutzen (anstatt String-Frickeleien), s. z.B. SQL Server Compact Abfrage [http://www.entwickler-ecke.de/viewtopic.php?p=671154#671154] (insb. der dort verlinkte Artikel SQL-Parameter [http://www.mycsharp.de/wbb2/thread.php?threadid=66704]).
Ein einfaches Hochkomma im Text würde beispielsweise schon einen Fehler verursachen (ganz zu schweigen von SQL-Injection [http://de.wikipedia.org/wiki/SQL-Injection]).


Marc Dirk - Mi 17.04.13 19:59

Vielen Dank Th69!

Der Artikel war sehr aufschlussreich und ich denke ich habe mein Problem jetzt erkannt. 'Werd es jetzt testen.

Gruss
Marc