2016-06-30 19 views
0

Aus irgendeinem Grund löscht UPDATE den Datensatz in meiner SQL Server-Datenbank, anstatt sie zu aktualisieren. Ich habe versucht, nur eine Variable zu übergeben (und änderte es verschiedene einzelne Felder) und es löscht 100%. Ich habe auch sichergestellt, dass Daten übergeben wurden, so dass ich nicht mit einem DBNull-Problem zu tun habe. Meine SO- und Google-Suchen kommen immer mit dem Löschen und fügen dann den Zeilenprozess zum Aktualisieren von Datensätzen hinzu. Was könnte hier vor sich gehen?SQL UPDATE löscht Datensatz

protected void grdvMyEntries_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    string Task = (grdvMyEntries.Rows[e.RowIndex].FindControl("ddlTasks") as DropDownList).SelectedItem.Value; 

    string Code = (grdvMyEntries.Rows[e.RowIndex].FindControl("ddlPayrollCodes") as DropDownList).SelectedItem.Value; 
    DateTime strDate = Convert.ToDateTime((grdvMyEntries.Rows[e.RowIndex].FindControl("txtDateEdit") as TextBox).Text.Trim()); 
    string TimeIn = (grdvMyEntries.Rows[e.RowIndex].FindControl("txtTimeInEdit") as TextBox).Text.Trim(); 
    string TimeOut = (grdvMyEntries.Rows[e.RowIndex].FindControl("txtTimeOutEdit") as TextBox).Text.Trim(); 
    string ItemNo = (grdvMyEntries.Rows[e.RowIndex].FindControl("txtItemNo") as TextBox).Text.Trim(); 
    string WO = (grdvMyEntries.Rows[e.RowIndex].FindControl("txtWO") as TextBox).Text.Trim(); 
    string WIP = (grdvMyEntries.Rows[e.RowIndex].FindControl("txtWIP") as TextBox).Text.Trim(); 
    string Note = (grdvMyEntries.Rows[e.RowIndex].FindControl("txtNote") as TextBox).Text.Trim(); 
    string TimeID = grdvMyEntries.DataKeys[e.RowIndex].Value.ToString(); 
    string strConnString = ConfigurationManager.ConnectionStrings["MAFapp"].ConnectionString; 

    string strTmp = "Date:" + strDate + "|TimeIn:" + TimeIn + "|TimeOut:" + TimeOut + "|WIP:" + WIP + "|WO:" + WO + "|ItemNo:" + ItemNo + "|Task:" + Task + "|Code:" + Code + "|Note:" + Note + "|WHERE TimeID:" + TimeID; 
    Debug.Print(strTmp); 

    using (SqlConnection con = new SqlConnection(strConnString)) 
    { 
     string query = "UPDATE Time SET [Date][email protected], [TimeIn][email protected], [TimeOut][email protected], [WIP][email protected], [WO][email protected], [ItemNo][email protected], [Task][email protected], [Code][email protected], [Note][email protected] WHERE [TimeID][email protected]"; 
     Debug.WriteLine(query); 
     using (SqlCommand cmd = new SqlCommand(query)) 
     { 
      cmd.Connection = con; 
      cmd.Parameters.AddWithValue("@TimeID", TimeID); 
      cmd.Parameters.AddWithValue("@Date", strDate); 
      cmd.Parameters.AddWithValue("@TimeIn", TimeIn); 
      cmd.Parameters.AddWithValue("@TimeOut", TimeOut); 
      if (String.IsNullOrWhiteSpace(WIP.Trim())) 
      { 
       cmd.Parameters.AddWithValue("@WIP", WIP).Value = Convert.DBNull; ; 
      } 
      else 
      { 
       cmd.Parameters.AddWithValue("@WIP", WIP); 
      } 
      if (String.IsNullOrWhiteSpace(WO.Trim())) 
      { 
       cmd.Parameters.AddWithValue("@WO", WO).Value = Convert.DBNull; ; 
      } 
      else 
      { 
       cmd.Parameters.AddWithValue("@WO", WO); 
      } 
      if (String.IsNullOrWhiteSpace(ItemNo.Trim())) 
      { 
       cmd.Parameters.AddWithValue("@ItemNo", ItemNo).Value = Convert.DBNull; ; 
      } 
      else 
      { 
       cmd.Parameters.AddWithValue("@ItemNo", ItemNo); 
      } 
      if (String.IsNullOrWhiteSpace(Task.Trim())) 
      { 
       cmd.Parameters.AddWithValue("@Task", Task).Value = Convert.DBNull; ; 
      } 
      else 
      { 
       cmd.Parameters.AddWithValue("@Task", Task); 
      } 
      cmd.Parameters.AddWithValue("@Code", Code); 

      if (String.IsNullOrWhiteSpace(Note.Trim())) 
      { 
       cmd.Parameters.AddWithValue("@Note", Note).Value = Convert.DBNull; ; 
      } 
      else 
      { 
       cmd.Parameters.AddWithValue("@Note", Note); 
      } 


      con.Open(); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
      tblSummary.DataBind(); 
      grdvMyEntries.DataBind(); 
     } 
    } 
} 
+3

Haben Sie Trigger auf Ihrem Tisch? Wenn nein, ist es unmöglich, einen Datensatz mit einem Update zu löschen. Vielleicht haben Sie einige Felder auf NULL und Ihre Check-Abfrage erkennt sie nicht –

+0

Haben Sie die Datenbanktabelle überprüft die Zeilen fehlen (wie Joe sagte, kann es nicht durch das Update selbst gelöscht werden)? könnte es sein, dass dein update die reihen wegen einer "fehlerhaften" auswahl an einem anderen ort nicht anspricht? – Thorarins

+0

Es gibt keine Möglichkeiten mit der Update-Anweisung zu löschen, es sei denn, Sie haben einen Trigger für die Tabelle als @Joe Taras erwähnt. –

Antwort

2

Das Update löscht keine Zeilen aus einer Tabelle. Die einzige Möglichkeit wäre ein Trigger auf Ihren Tischen. Bitte führen Sie diese Abfrage aus, um die Liste der Auslöser und ihren Text zu finden.

USE ChangeThisToDatabaseName 
GO 

SELECT so.NAME 
    ,TEXT 
FROM sysobjects so 
    ,syscomments sc 
WHERE type = 'TR' 
    AND so.id = sc.id 
    AND TEXT LIKE '%Time%' 

Hinweis: Wenn es keine Trigger auf dem Tisch ist, dann stellen Sie sicher, Gibt es irgendwelche Einträge auf dem Filter auf der Grundlage vorhanden sein, bevor das Update ausgeführt wird.

0

Vor einiger Zeit, wenn ich versuche, Daten in eine Tabelle einzustecken, werden Daten aufgezeichnet, aber nach zwei Sekunden vom Einfügen wurde der Datensatz automatisch gelöscht. Es gab keinen Auslöser oder so etwas. Dann habe ich die Tabelle beobachtet und ein Indexierungsproblem gefunden. Ich habe diesen Index neu erstellt und das Problem wurde gelöst. Wenn Sie keine großen Daten in Ihrer Tabelle haben, empfehle ich Ihnen, Ihre Indizes neu zu erstellen oder neu zu erstellen.

+0

versucht, den Index neu zu erstellen (nur eine drin) und es hat nicht funktioniert ... – Beengie

Verwandte Themen