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();
}
}
}
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 –
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
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. –