Hallo zusammen,
ich bin nicht gerade geschickt wenn es um den Datenbankzugriff geht und das rächt sich gerade.
Ich muss Daten aus einer Tabelle einlesen, in jeder Zeile eine bestimmte Spalte (den Wert darin) bearbeiten und dann den ganzen Kram zurück auf die Datenbank schreiben.
Nun hat meine Testdatenbank in jener Tabelle ca. 680.000 Datensätze. Das Lesen dauert ewig und irgendwann bekomme ich eine OutOfMemory-Exception.
Hier mein Code:
[highlight=c#]
conString = "Password=" + txtPasswort.Text + ";Persist Security Info=True;User ID=" + txtLogin.Text + ";Initial Catalog=" + txtDatenbank.Text + ";Data Source=" + cmbServer.SelectedText;
cnn = new SqlConnection(conString);
cnn.Open();
SqlCommand myCommand = new SqlCommand("SELECT TextID, Objektart, ObjektID, Sprache, MemoText FROM TM_Texte", cnn);
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(myCommand);
SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
da.Fill(dt);
pbFortschritt.Value = 0;
pbFortschritt.Maximum = (dt.Rows.Count * 10) + 10;
foreach (DataRow row in dt.Rows)
{
string rtf = row["MemoText"].ToString();
if (rtf != null && rtf != "" && rtf.StartsWith(@"{\rtf"))
{
tx.Clear();
tx.Append(rtf, TXTextControl.StringStreamType.RichTextFormat, TXTextControl.AppendSettings.None);
tx.Save(out rtf, TXTextControl.StringStreamType.RichTextFormat);
row["MemoText"] = rtf;
}
pbFortschritt.PerformStep();
}
da.Update(dt);
pbFortschritt.PerformStep();
MessageBox.Show("Konvertierung erfolgreich abgeschlossen", "Fertig", MessageBoxButtons.OK, MessageBoxIcon.Information);
[/highlight]
Kann mir jemand sagen, was ich ändern sollte, bzw. besser machen könnte, damit ich dieses Problem vermeiden kann?
Danke schonmal
Andi
ich bin nicht gerade geschickt wenn es um den Datenbankzugriff geht und das rächt sich gerade.
Ich muss Daten aus einer Tabelle einlesen, in jeder Zeile eine bestimmte Spalte (den Wert darin) bearbeiten und dann den ganzen Kram zurück auf die Datenbank schreiben.
Nun hat meine Testdatenbank in jener Tabelle ca. 680.000 Datensätze. Das Lesen dauert ewig und irgendwann bekomme ich eine OutOfMemory-Exception.
Hier mein Code:
[highlight=c#]
conString = "Password=" + txtPasswort.Text + ";Persist Security Info=True;User ID=" + txtLogin.Text + ";Initial Catalog=" + txtDatenbank.Text + ";Data Source=" + cmbServer.SelectedText;
cnn = new SqlConnection(conString);
cnn.Open();
SqlCommand myCommand = new SqlCommand("SELECT TextID, Objektart, ObjektID, Sprache, MemoText FROM TM_Texte", cnn);
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter(myCommand);
SqlCommandBuilder cbuilder = new SqlCommandBuilder(da);
da.Fill(dt);
pbFortschritt.Value = 0;
pbFortschritt.Maximum = (dt.Rows.Count * 10) + 10;
foreach (DataRow row in dt.Rows)
{
string rtf = row["MemoText"].ToString();
if (rtf != null && rtf != "" && rtf.StartsWith(@"{\rtf"))
{
tx.Clear();
tx.Append(rtf, TXTextControl.StringStreamType.RichTextFormat, TXTextControl.AppendSettings.None);
tx.Save(out rtf, TXTextControl.StringStreamType.RichTextFormat);
row["MemoText"] = rtf;
}
pbFortschritt.PerformStep();
}
da.Update(dt);
pbFortschritt.PerformStep();
MessageBox.Show("Konvertierung erfolgreich abgeschlossen", "Fertig", MessageBoxButtons.OK, MessageBoxIcon.Information);
[/highlight]
Kann mir jemand sagen, was ich ändern sollte, bzw. besser machen könnte, damit ich dieses Problem vermeiden kann?
Danke schonmal
Andi
Comment