2016-07-29 4 views
-1

ASP.NET Webforms를 사용하여 프로젝트를 진행하고 있습니다. 현재 프로젝트의 업데이트 부분에 있습니다.SQL Server에서 UPDATE를 사용하는 방법

:이 같은 데이터를 갖고 싶어 : 코드

시계

ID | EmpID | Date  | Clock IN | Morning IN | Morning OUT | Clock OUT 
1 | 1 | 07/20/16 | 07:00 am | 09:00 am | 09:15 am | 11:00 am 
2 | 1 | 07/21/16 | 08:00 am | 10:00 am | 10:15 am | 12:00 pm 

을하지만이 대신

시계 여기

ID | EmpID | Date  | Clock IN | Morning IN | Morning OUT | Clock OUT 
1 | 1 | 07/20/16 | 07:00 am | 10:00 am | 10:15 am | 12:00 pm 
2 | 1 | 07/21/16 | 08:00 am | 10:00 am | 10:15 am | 12:00 pm 

를 얻을 수있다

삽입

protected void cmdCIN_Click(object sender, EventArgs e) 
{ 
    myConnection.Open(); 

    Response.Write("Welcome!"); 
    string query = "Insert into [dbo].[Clock] (EmpID,Date,ClockIN) Values ((select EmpID from Emp_Record where ID = @user), @date, @cin)"; 

    SqlCommand insertCommand = new SqlCommand(query, myConnection); 
    insertCommand.Parameters.AddWithValue("@user", txtID.Text); 
    insertCommand.Parameters.AddWithValue("@date", DateTime.Now.ToShortDateString()); 
    insertCommand.Parameters.AddWithValue("@cin", DateTime.Now.ToLongTimeString()); 
    insertCommand.ExecuteNonQuery(); 
    myConnection.Close(); 
} 

protected void cmdAMIN_Click(object sender, EventArgs e) 
{ 
    Response.Write("You have started your first break"); 
    myConnection.Open(); 
    string query = "UPDATE Clock SET MorningIN = @AMIN FROM Emp_Record INNER JOIN Clock ON Em_Record.EmpID = Clock.LeadID;"; 
    SqlCommand insertCommand = new SqlCommand(query, myConnection); 
    insertCommand.Parameters.AddWithValue("@AMIN", DateTime.Now.ToLongTimeString()); 
    myConnection.Close(); 
} 

는 어떻게 다른 데이터가 첫 번째에 영향을주지 않도록 업데이트 명령을 사용하기 위하여려고하고 UPDATE?

+2

UPDATE 문의 WHERE 절이 없으면 테이블의 모든 레코드가 동일한 값으로 업데이트됩니다. _WHERE ID = @UserID_ – Steve

+1

을 추가해야합니다. 여기에주의하십시오. 이와 같이 pass through SQL에서 AddWithValue를 사용하면 잘못된 데이터 유형이 발생할 수 있습니다. 특히 datetime 값을 사용합니다. http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ 명시 적으로 데이터 유형의 이름을 지정하는 것이 좋습니다 (또는 더 나은 방법은 저장 프로 시저). –

+0

아침의 행이 null 인 곳을 사용할 때. 내가 놓친 게 있니? –

답변

0

업데이트 코드를 db에 업데이트 할 행을 알려주는 Where 문으로 정규화해야합니다. 그렇지 않으면 모든 행이 갱신됩니다.

EX : "UPDATE Clock SET MorningIN = @AMIN FROM Emp_Record INNER JOIN Clock ON Em_Record.EmpID = Clock.LeadID WHERE ID = @idtoupdate;";

0

당신의 문제는 ASP.NET하지만, SQL에 대한 없습니다. 문제를 해결하려면

는 SQL Server Management Studio를 (또는 당신의 마음에 드는 SQL 도구)를 사용하여 실행

declare @user int 
set @user=1 -- value you enter in txtID.Text 
declare @date date 
set @date=GETDATE() 
declare @cin time 
set @cin=GETDATE() 

Insert into [dbo].[Clock] (EmpID,Date,ClockIN) 
     Values ((select EmpID from Emp_Record where ID = @user), @date, @cin) 

다음

declare @AMIN time 
set @AMIN=GETDATE() 

UPDATE Clock SET MorningIN = @AMIN FROM Emp_Record 
     INNER JOIN Clock ON Em_Record.EmpID = Clock.LeadID; 

마지막 쿼리가 잘못보고 대부분 실패합니다.

UPDATE Clock SET MorningIN = @AMIN FROM Emp_Record t1 
     INNER JOIN Clock t2 ON t1.EmpID = t2.ID; 

으로 수정하고 다시 시도하십시오. 작동한다면 MorningIN을 모든 행에 대해 동일한 값으로 업데이트합니다. 특정 사용자 만 업데이트해야하는 경우 - 첫 번째 쿼리와 비슷한 WHERE 절에 ID를 제공해야합니다. 어떤 논리인지 모르지만 예 :

UPDATE Clock SET MorningIN = @AMIN FROM Emp_Record t1 
     INNER JOIN Clock t2 ON t1.EmpID = t2.ID AND t2.ID = @XXX 
관련 문제