看看以下代码:
const string UPDATE_TIME_STATUS = "UPDATE BilledHour SET [SubmittedAt] = @SubmittedAt, TimeStatus = 2 WHERE EmployeeID = @EmployeeID AND WorkDate >= @FromDate AND WorkDate <= @ToDate AND TimeStatus = 1";
using (m_DAL = new DAL())
{
SqlCommand cmd = new SqlCommand(UPDATE_TIME_STATUS, m_DAL.sqlConn);
cmd.CommandType = CommandType.Text;
cmd.Parameters.Add("@SubmittedAt", SqlDbType.DateTime).Value = DateTime.Now;
cmd.Parameters.AddWithValue("@EmployeeID", EmployeeID);
cmd.Parameters.AddWithValue("@EmployeeID", EmployeeID);
cmd.Parameters.AddWithValue("@FromDate", FromDate);
cmd.Parameters.AddWithValue("@ToDate", ToDate);
int rows = cmd.ExecuteNonQuery();
}
运行此代码后,数据库始终将[SubmittedAt]
列显示为null。
WorkDate TimeStatus SubmittedAt
-----------------------------------------------
2016-12-26 00:00:00.000 2 NULL
2016-12-27 00:00:00.000 2 NULL
2016-12-28 00:00:00.000 2 NULL
2016-12-29 00:00:00.000 2 NULL
2016-12-30 00:00:00.000 2 NULL
它正在更新[TimeStatus]
列,所以我知道SQL语句正在执行。
这是SQL I在Management Studio中运行以查看结果:
DECLARE @EmployeeID int
DECLARE @SubmittedAt datetime
DECLARE @FromDate datetime
DECLARE @ToDate datetime
SET @EmployeeID = 3111
SET @SubmittedAt = GetDate()
SET @FromDate = '12/25/2016 12:00:00 AM'
SET @ToDate ='12/31/2016 12:00:00 AM'
select WorkDate, TimeStatus, SubmittedAt
from BilledHour
WHERE
EmployeeID = @EmployeeID
AND
WorkDate BETWEEN @FromDate AND @ToDate
我做错了什么?
答案 0 :(得分:0)
假设“SubmittedAt”是SQL中的DATETIME字段,而不是使用此
cmd.Parameters.AddWithValue("@SubmittedAt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
使用此
cmd.Parameters.AddWithValue("@SubmittedAt", DateTime.Now);
或者这(如其他人建议的那样)
cmd.Parameters.Add("@SubmittedAt", SqlDbType.DateTime).Value = DateTime.Now;
另外,您提到它成功更新了[TimeStatus]。在更新查询中,您指定了更新TimeStatus = 2 WHERE TimeStatus = 1 。对于所有记录,结果集的TimeStatus = 1。
WorkDate TimeStatus SubmittedAt
2016-12-26 00:00:00.000 1 NULL
2016-12-27 00:00:00.000 1 NULL
2016-12-28 00:00:00.000 1 NULL
2016-12-29 00:00:00.000 1 NULL
2016-12-30 00:00:00.000 1 NULL
您确定要查看正确的数据吗?您可能希望搜索TimeStatus = 2,如下所示
SELECT WorkDate, TimeStatus, SubmittedAt FROM BilledHour Where TimeStatus=2
编辑1:
解决方法:
const string UPDATE_TIME_STATUS = "UPDATE BilledHour SET [SubmittedAt] = GETDATE(), TimeStatus = 2 WHERE EmployeeID = @EmployeeID AND WorkDate >= @FromDate AND WorkDate <= @ToDate AND TimeStatus = 1";
跳过传递日期参数,只在查询中使用SQL函数GETDATE()。
答案 1 :(得分:0)
好的,我错过了显而易见的事。在运行此代码之前,所有[TimeStatus]
字段都设置为2.由于更新筛选记录设置为1(AND TimeStatus = 1
),因此不会更新任何记录。
现在我在找到机会之前找出谁正在更新我的桌子......