C# 使用存储过程更新表时出错
在此存储过程中发生错误。即“format”不是可识别的内置函数名C# 使用存储过程更新表时出错,c#,.net,C#,.net,在此存储过程中发生错误。即“format”不是可识别的内置函数名 set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[attendance_updatebyemployee_id] @Employee_id int, @AtDate datetime, @FNLogged bit, @ANLogged bit, @LogTime varchar(10), @LogOuttime varchar(10) AS
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[attendance_updatebyemployee_id]
@Employee_id int,
@AtDate datetime,
@FNLogged bit,
@ANLogged bit,
@LogTime varchar(10),
@LogOuttime varchar(10)
AS
BEGIN
select @AtDate
SET NOCOUNT ON;
update Mst_Attendance set FNLogged=@FNLogged,
ANLogged=@ANLogged,LogTime=@LogTime,LogOuttime=@LogOuttime
where EmployeeId=@Employee_id and Atdate = FORMAT(@AtDate,'MM/DD/YYYY')
select * from Mst_Attendance where Atdate=@AtDate and EmployeeId=@Employee_id
END
FORMAT()
不是SQL Server内置函数
您可以这样做:
update Mst_Attendance
set
FNLogged=@FNLogged, ANLogged=@ANLogged,
LogTime=@LogTime, LogOuttime=@LogOuttime
where
EmployeeId=@Employee_id AND
Atdate = @AtDate
请告诉我您的
Atdate
列是datetime
而不是varchar()
以MM/DD/YY格式将datetime列作为字符串输出的替代方法:
CONVERT(VARCHAR, @AtDate, 1)
但是,这在查询中不是必需的,因为该列似乎已经是DateTime类型
更多内置日期转换格式:
试试看
CONVERT(VARCHAR(10), @AtDate, 101) AS [MM/DD/YYYY]
但是,您的AtDate列肯定应该是datetime吗?您使用的是什么数据库和版本?根据语法,我假设它是MS SQL Server,但它是什么版本?2000年,2008年 在MS SQL Server中,没有
格式
函数。但是您可以使用转换
CONVERT(VARCHAR(10), @AtDate ,101)
101在这里表示“MM/DD/YYYY”。对于其他格式,请检查
我假设数据库中的Atdate
字段是VARCHAR(10)(否则根本不需要任何转换)。但我强烈建议不要这样做。只要可能,对日期使用DATETIME
,notVARCHAROP不输出日期时间;而是使用它进行筛选。此过程返回一个不正确的值。也就是说,我想要日期格式dd/mm/yyyy。但是如果您的AtDate
列的类型也是DATETIME
(我当然希望是!),则获取一个mm/dd/yyyy,然后,您根本不需要任何格式设置/转换-只需比较和AtDate=@AtDate
-保持简单易懂!DATETIME
始终是DATETIME
是DATETIME
-无需格式化/转换/修改!按原样使用…可能重复您为什么再次问相同的问题???修复您的数据库:使用varchar()存储日期时间的设计很差。as[MM/DD/YYYY]上也有一个错误。ASAtDate列附近的语法不正确smalldatetime@aswathi:您刚才在评论中说AtDate是数据库中的SMALLDATETIME,对吗?那么根本不需要转换。只需从存储过程中删除格式和转换,以及从C#代码中删除.toString,就可以了