2016-07-29 64 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(); 
} 

UPDATE

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可能会导致不正确的数据类型。特别是使用日期时间值。 http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/明确指定数据类型会更好(或者更好的是使用存储过程)。 –

+0

当我使用排在早上的地方为空时。我错过了什么吗? –

回答

0

您需要使用Where语句来限定更新代码,该语句告诉db要更新哪一行。否则,所有行都会更新。

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