Asw*_*thi 3 .net c# sql-server datetime
将char数据类型转换为DateTime数据类型会导致DateTime值超出范围.该语句已终止.
ALTER PROCEDURE [dbo].[attendance_updatebyemployee_id]
@Employee_id int,
@AtDate datetime,
@FNLogged bit,
@ANLogged bit,
@LogTime varchar(10),
@LogOuttime varchar(10)
AS
BEGIN
SET NOCOUNT ON;
update Mst_Attendance set FNLogged=@FNLogged,
ANLogged=@ANLogged,LogTime=@LogTime,LogOuttime=@LogOuttime
where EmployeeId=@Employee_id and Atdate= @AtDate
END
Run Code Online (Sandbox Code Playgroud)
在C#代码我把它作为
cmd.Parameters.AddWithValue("@AtDate",Dtime.ToString("dd/MMM/yyyy"));
Run Code Online (Sandbox Code Playgroud)
使用SQl profiler时,传递的数据是
exec [dbo].[attendance_updatebyemployee_id] @Employee_id=2,@AtDate='Feb 19 2011 12:00:00:000AM',@FNLogged=1,@ANLogged=0,@LogTime='11:45 AM',@LogOuttime=' '
Run Code Online (Sandbox Code Playgroud)
在存储过程中,@ ArcDate具有2011-02-19 00:00:00.000.
从更新命令中断的值.
在表格内,日期保存为 2/19/2011 12:00:00 AM
我该如何解决这个日期问题.
从您的代码中,DateTime您的C#代码中似乎有一个变量 - 所以只需按原样使用 - 完全不需要转换为字符串!!
如果你有:
ALTER PROCEDURE [dbo].[attendance_updatebyemployee_id]
@Employee_id int,
@AtDate datetime,
.....
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样存储这个:
cmd.Parameters.AddWithValue("@AtDate", Dtime);
Run Code Online (Sandbox Code Playgroud)
假设Dtime是DateTimeC#中的类型.
不要不必要地转换和投射东西!这只会引入潜在的破损和转换错误!只需按DateTime原样使用- 它将被发送到SQL Server并DATETIME在T-SQL中使用和识别.
如果你真的需要将日期值转换为字符串以将其传递给SQL Server,我总是建议使用ISO-8601标准格式:YYYYMMDD或者yyyy-MM-ddThh:mm:ss无论是否有任何区域,语言或区域设置,它都可以识别并工作.
所以,如果你绝对必须,那么使用:
Dtime.ToString("yyyyMMdd")
Run Code Online (Sandbox Code Playgroud)
要么
Dtime.ToString("yyyyMMddTHH:mm:ss")
Run Code Online (Sandbox Code Playgroud)
没有别的(所有其他格式都依赖于语言和设置,可能在一种情况下有效,在另一种情况下有效; ISO-8601 始终有效)
| 归档时间: |
|
| 查看次数: |
1996 次 |
| 最近记录: |