[c#] Parallelitätsverletzung & SQLite

Hallo zusammen,

vorweg, diesen Post hatte ich auch bereits in einem anderen Forum gepostet, da konnte mir aber vermutlich keiner helfen, daher wende ich mich an euch mit folgendem Problem:

Bei meinem SQLite-Tabelleneditor bekomm ich, wenn ich Tabellen mit einem DateTime-Feld, ändern will immer wieder folgende Exception:

[08.12.2011 22:20:32] frmTableEditor.dgvTableContent_CellEndEdit(System.Object sender,System.Windows.Forms.DataGridViewCellEventArgs e): Parallelitätsverletzung: Der UpdateCommand hat sich auf 0 der erwarteten 1 Datensätze ausgewirkt.

Hier meine Form mit den entsprechenden Methoden, Fehler tritt in der festtgedruckten Zeile auf:
Code:
using System;
using System.Windows.Forms;
using SoundConductor.Common.Helper;
using System.Data;
using System.Data.SQLite ;

namespace SoundConductor.forms
{
    public partial class frmTableEditor : Form
    {
        DataHelper db = new DataHelper();
        SQLiteDataAdapter daTable = new SQLiteDataAdapter();
        DataSet dsTables = new DataSet();
        DataSet dsTableContent = new DataSet();

        private string tableName = "";
        private bool showID = false;
        private bool showTables = false;

        public bool ShowTables
        {
            get { return showTables; }
            set { showTables = value; }
        }

        public bool ShowID
        {
            get { return showID; }
            set { showID = value; }
        }

        public string TableName
        {
            set { tableName = value; }
        }

        public frmTableEditor()
        {
            InitializeComponent();
        }

        private void frmTableEditor_Load(object sender, EventArgs e)
        {
            try
            {
                if (showTables == false)
                {
                    dgvTableContent.Dock = DockStyle.Fill;
                    this.Text = string.Format(this.Text, tableName);

                    daTable = db.GetTable(this.tableName);
                    daTable.Fill(dsTables);

                    //set the DataGridView DataSource
                    dgvTableContent.DataSource = dsTables.Tables[0];
                    dgvTableContent.Columns["ID"].Visible = this.showID;
                }
                else
                {
                    dgvTableContent.Dock = DockStyle.None;
                    DataSet Tables = db.GetTables();
                    if (Tables.Tables.Count > 0)
                    {
                        cboTables.DataSource = Tables.Tables[0];
                        cboTables.DisplayMember = "name";
                        cboTables.Refresh();
                    }
                }

                lblAttention.Visible = showTables;
                lblTables.Visible = showTables;
                cboTables.Visible = showTables;
                //btnGo.Visible = showTables;
                
                
            }
            catch (Exception ex)
            {
                DebugHelper.WriteToLog(ex.Message);
            }
        }

        private void btnSaveData_Click(object sender, EventArgs e)
        {

        }
      
        private void dgvTableContent_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                //dgvTableContent.EndEdit();
                [COLOR="Red"][B]daTable.Update(dsTableContent); [/B][/COLOR]
            }
            catch (Exception ex)
            {
                DebugHelper.WriteToLog(ex.Message);
            }
        }

        private void btnDeleteRow_Click(object sender, EventArgs e)
        {
            try
            {
                dgvTableContent.Rows.RemoveAt(dgvTableContent.SelectedRows[0].Index);
                daTable.Update(dsTableContent);
            }
            catch (Exception ex)
            {
                DebugHelper.WriteToLog(ex.Message.ToString());
            }
        }

        private void cboTables_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                this.Text = string.Format(this.Text, cboTables.Text);

                dsTableContent.Clear();
                dsTableContent.Dispose();
                dsTableContent = new DataSet();

                daTable = db.GetTable(cboTables.Text);
                daTable.Fill(dsTableContent);

                dgvTableContent.AutoGenerateColumns = true;
                dgvTableContent.DataSource = dsTableContent.Tables[0];

                dgvTableContent.Columns["ID"].Visible = this.showID;
                dgvTableContent.Refresh();
                dgvTableContent.Update();
            }
            catch (Exception ex)
            {
                DebugHelper.WriteToLog(ex.Message.ToString());
            }
        }
    }
}

Leider kann ich die Werte, meiner Meinugn nach, nicht mal eben so manipulieren, da es sich hierbei um eine generische maske handelt mit der ich die zu bearbeitende Tabelle auswählen kann.

Wie ich gelesen habe, scheint das wirklich mit dem Datetime-Feld in verbindung zu stehen, da die Formate sich wohl unterscheiden.
Meiner Erkenntnis nach, kann ich auch alle Tabellen, außer mit einem Datetime-Feld, ohne Problem bearbeiten.
Aich gab es Artikel darüber, dass dies wohl mit einem Decimal-Feld zusammenhängt, meine Tabelle besitzt aber keine sondern nur Double.

Habt ihr da eine Mögliche Lösung? Ich find zum Verrecken nichts und verzweifle langsam dran. Etliche Stunden googlen habe ich schon hinter mir und ich find einfach nichts was mir hilft.

Lieben Dank!
 
Zuletzt bearbeitet:
Ich habe noch einen Hinweis darauf gefunden, dass es bei SQLlight ein Problem gibt, wenn deine Spaltennamen einen Unterstrich beinhalten. Kannst du das mal überprüfen?

Ansonsten ist es mit deinem Code recht schwierig, etwas herauszubekommen. Kannst du uns da noch mehr Infos geben?

Ist sichergestellt, dass niemand anderes an der Tabelle etwas ändert, während du daran arbeitest?

Wie sieht denn der Timestamp in der DB aus und wie der, den du einfügen willst?
 
Ich habe noch einen Hinweis darauf gefunden, dass es bei SQLlight ein Problem gibt, wenn deine Spaltennamen einen Unterstrich beinhalten. Kannst du das mal überprüfen?
Ok ich habe herausgefunden, dass meine Tabellen (die nicht editiert werden können) über Unterstriche verfügen. Aktuell prüfe ich noch eine Möglichkeit dies auszumerzen, da ich meine FKs eigentlich immer so kennzeichne: "FK_Tabelle_Primarykey".
Prinzipiell will ich vermeiden, dass ich nun meine ganzen FKs vom Namen her ändern muss :(

Ist sichergestellt, dass niemand anderes an der Tabelle etwas ändert, während du daran arbeitest?
ja das ist ausgeschlossen, da es sich hierbei um eine Applikation handelt die nicht als ein Mehrplatzsystem agiert.

Wie sieht denn der Timestamp in der DB aus und wie der, den du einfügen willst?
Prüfe ich, sobald ich das mit den Unterstrichen als Fehlerquelle ausschließen konnte.
 
Ok ich habe herausgefunden, dass meine Tabellen (die nicht editiert werden können) über Unterstriche verfügen. Aktuell prüfe ich noch eine Möglichkeit dies auszumerzen, da ich meine FKs eigentlich immer so kennzeichne: "FK_Tabelle_Primarykey".
Prinzipiell will ich vermeiden, dass ich nun meine ganzen FKs vom Namen her ändern muss :(

Du könntest ja mal mit einem kleinen Testprojekt oder nur an der einen Stelle testen, ob das hilft, vielleicht gibt es den Bug bei dir ja schon gar nicht mehr. Wie gesagt, hatte nur einen anderen Thread gefunden, wo genau das das Problem war. Allgemein finde ich es aber auch nicht gut, eine sinnvolle Benennung aufgrund eines Bugs zu ändern.
 
Du könntest ja mal mit einem kleinen Testprojekt oder nur an der einen Stelle testen, ob das hilft, vielleicht gibt es den Bug bei dir ja schon gar nicht mehr. Wie gesagt, hatte nur einen anderen Thread gefunden, wo genau das das Problem war. Allgemein finde ich es aber auch nicht gut, eine sinnvolle Benennung aufgrund eines Bugs zu ändern.
Mach ich später fertig und dann schreib ich dir meine Erkenntnisse, danke dir bis hierhin schon einmal!
 
Witzigerweise kann ich es in einer neuen Solution (mit dem selben Code und der selben DB) nicht nachstellen und jetzt frage ich mich gerade ernsthaft wo ich den Fehler mache.

Anbei hab ich mal die eigenständige Solution mitgepackt.

Edit:
Keine Ahnung woran es lag aber nun gehts in meiner normalen Solution auch wieder.
Danke euch dennoch für die Hilfe. An den Datumswerten und den Unterstrichen lag es dann wohl nicht.
Ich werde das aber zuhause nochmal prüfen und mich dann ggf. nochmal zurückmelden.
 
Zuletzt bearbeitet:
Zurück
Oben