DATE没有使用sql命令更新到数据库

时间:2013-02-20 13:40:51

标签: c# sql sql-server-2008

我正在尝试更新数据库中的日期,该日期在开头设置为null,并且用于日期的数据类型为nvarchar(50)

我甚至在SQL Server中尝试了nchardatevarchar(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();

2 个答案:

答案 0 :(得分:1)

好吧,我不明白为什么你要为此使用字符串参数,或者为什么在将日期和时间值发送到数据库之前关心格式。在任何情况下,既然SQL Server也可以告诉时间,为什么要让应用程序这样做呢?您可以通过为CURRENT_TIMESTAMPintime列设置默认值date来绕过所有这些(因此您在插入时甚至不需要指定它们),并且在更新时,如果实际上你确实需要更新这些列:

UPDATE dbo.barcode 
  SET intime = CURRENT_TIMESTAMP,
      [date] = CURRENT_TIMESTAMP
  WHERE bcd = @bcd;

答案 1 :(得分:0)

因为您使用单引号包装@date。参数不应该用单引号括起来。删除它,它会工作。

UPDATE barcode 
SET    intime = @time,
       date = @date 
WHERE  bcd = @bcd

还有一件事,保留日期的格式。仅在投影期间转换日期(选择