使用sql命令不能将日期更新到数据库中

0 人关注

我试图更新数据库中的日期,这个日期在开始时被设置为null,而且用于日期的数据类型是 nvarchar(50)

我甚至在SQL Server中尝试了 nchar , date , varchar(50) 数据类型,但是当更新时,它给我的错误提示是。

当从字符串转换日期和/或时间时,转换失败。

我怎样才能摆脱这个问题,我想用2-feb-2013的格式来消除日期。

dd.tostring("D);

而它却不工作。

SqlCommand cmd = new SqlCommand("update barcode set intime=@time,date='@date' where bcd=@bcd", con);
cmd.Parameters.Add("@cc", SqlDbType.NChar, 20).Value = c;
cmd.Parameters.Add("@bcd", SqlDbType.NChar, 20, "bcd").Value = textBox1.Text;
DateTime dd = DateTime.Now;
String ss, sss;
ss = dd.ToString("t");
sss = dd.ToString("d");
cmd.Parameters.Add("@time", SqlDbType.NVarChar, 50, "intime").Value = ss;
cmd.Parameters.Add("@date", SqlDbType.Date, 50, "date").Value = sss;
cmd.ExecuteNonQuery();
    
3 个评论
说真的,这怎么可能被编辑了 三次 而仍然不接近于正确?
@Anthony 有些人对标题之类的东西做了非常小的编辑,而忽略了帖子的其他部分。
Alex
ss,sss,cc,dd?我建议你为你的变量选择更合适的名字
c#
sql
sql-server-2008
Yuvi M
Yuvi M
发布于 2013-02-20
2 个回答
Aaron Bertrand
Aaron Bertrand
发布于 2013-02-20
0 人赞同

好吧,我不明白你为什么要用字符串参数来做这件事,也不明白你为什么要在向数据库发送日期和时间值之前关心一下格式。在任何情况下,既然SQL Server也能知道时间,为什么还要让应用程序做这个呢?你可以通过为 intime date 列设置默认值 CURRENT_TIMESTAMP (所以你甚至不需要在插入时指定它们),以及在更新时(如果你确实需要更新这些列)绕过这一切。

UPDATE dbo.barcode 
  SET intime = CURRENT_TIMESTAMP,
      [date] = CURRENT_TIMESTAMP
  WHERE bcd = @bcd;
    
John Woo
John Woo
发布于 2013-02-20
0 人赞同

因为你用单引号包住了 @date 。参数不应该用单引号包起来。去掉它就可以工作了。

UPDATE barcode 
SET    intime = @time,