【问题标题】:DATE is not getting updated into database using sql commandDATE 未使用 sql 命令更新到数据库中
【发布时间】:2013-02-05 12:56:57
【问题描述】:

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

我什至在 SQL Server 中尝试过 nchardatevarchar(50) 数据类型,但更新时出现错误提示:

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

如何摆脱这种情况,我想使用 2013 年 2 月 2 日的格式显示日期

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 一些人对标题等内容进行了非常小的修改,而忽略了帖子的其余部分。 :-(
  • ss,sss,cc,dd?我建议您为变量选择更合适的名称

标签: c# sql sql-server-2008


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    还有一件事,保持日期格式不变。仅在投影期间转换日期(select

    【讨论】:

    • 我能通过使用日期数据类型获得我之前提到的格式吗?
    • @YuviM 没有。日期应保存为数据库上的日期。如果要格式化日期,请在 SELECT 语句或应用程序级别进行。如果您使用这种格式,您将很难搜索或操作日期:2-feb-2013,因为您将为此使用varchar。数据库上的日期格式根本不重要,因为客户不会查看数据库。他们对该应用程序感兴趣。
    • 我已经准备了一个登录和注销表格,所以我需要格式化日期
    • 问题,你表中日期列的数据类型是什么?
    • 然后在参数cmd.Parameters.Add("@date", SqlDbType.Date, 50, "@date").Value = dd;的值上传递变量dd
    猜你喜欢
    • 2014-08-17
    • 1970-01-01
    • 2017-06-23
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多