2016-06-30 4 views
0

을 삭제합니다. 어떤 이유로 UPDATE가 SQL Server 데이터베이스를 업데이트하는 대신 레코드를 삭제합니다. 하나의 변수를 전달하려고 시도 (및 다른 개별 필드를 변경) 및 100 % 삭제합니다. 나는 또한 DBNull 문제를 다루지 않기 때문에 데이터가 전달되었는지 확인했습니다. 내 SO와 Google 검색은 삭제 된 다음 레코드 업데이트를 위해 행 프로세스를 추가합니다. 여기에 무슨 일이 벌어지고 있을까요?SQL UPDATE가 레코드

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

테이블을 비틀 었습니까? 없으면 업데이트가있는 레코드를 삭제할 수 없습니다. 어쩌면 당신은 NULL로 일부 필드를 가지고 있으며 귀하의 확인 쿼리가 그들을 인식하지 못합니다 –

+0

당신은 행이 누락 된 데이터베이스 테이블을 확인 했습니까 (조가 그 업데이트 자체에 의해 삭제 될 수 없다고)? 일부 업데이트에서 "잘못된"선택으로 인해 행이 업데이트되지 않을 수 있습니까? – Thorarins

+0

@Joe Taras 언급처럼 테이블에 트리거가 없으면 Update 문을 사용하여 삭제할 수 없습니다. –

답변

2

업데이트는 테이블에서 행을 삭제하지 않습니다. 유일한 가능성은 당신의 테이블에 방아쇠가 될 것입니다. 트리거 및 해당 텍스트 목록을 찾으려면이 쿼리를 실행하십시오.

USE ChangeThisToDatabaseName 
GO 

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

참고 : 테이블에 트리거가없는 경우 업데이트를 실행하기 전에 필터를 기반으로하는 레코드가 있는지 확인하십시오.

0

얼마 전에 데이터를 테이블에 넣으려고하면 데이터가 기록되지만 2 초 후에 데이터는 자동으로 삭제됩니다. 방아쇠가 생기지 않았거나 비슷한 것이 없었습니다. 그런 다음 테이블을 관찰하고 인덱싱 문제를 발견했습니다. 나는 그 색인을 재건했고 문제는 해결되었습니다. 테이블에 거대한 데이터가 없으면 인덱스를 다시 작성하거나 다시 작성하는 것이 좋습니다.

+0

인덱스를 재구성하려고 시도했지만 작동하지 않았습니다 ... – Beengie

관련 문제