我正在尝试更新数据库中的日期,该日期在开头设置为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();
答案 0 :(得分:1)
好吧,我不明白为什么你要为此使用字符串参数,或者为什么在将日期和时间值发送到数据库之前关心格式。在任何情况下,既然SQL Server也可以告诉时间,为什么要让应用程序这样做呢?您可以通过为CURRENT_TIMESTAMP
和intime
列设置默认值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
还有一件事,保留日期的格式。仅在投影期间转换日期(选择)