在MySQL和C#中使用表达式设置日期时间字段时发生异常

本文关键字:字段 时间 日期 异常 设置 表达式 MySQL | 更新日期: 2023-09-27 18:14:46

我无法在名为feeds的表上执行参数化SQL语句。

该表是这样定义的;

CREATE TABLE `feeds` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `last_changed` datetime DEFAULT NULL,
  `next` datetime DEFAULT NULL,
  `delta` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1$$

这是SQL语句。

更新feeds设置feedsdelta=@0,feedsnext=@1,feedslast_changed=@2,其中id=19限制1

当我尝试使用表达式作为值时,错误出现在参数@1上。这是价值。

(2013-05-22 11:58:57+间隔15分钟(

这会产生以下错误。

MySql.Data.MySqlClient.MySqlException(0x80004005(:第1行的列"next"的日期时间值"(2013-05-22 11:58:57+INTERVAL 15 MINUTE("不正确

我试着把日期时间用引号括起来,但无济于事。

这就是我在C#中执行SQL命令的方式。

ICollection<object> pParameters = ......
MySqlCommand cmd = new MySqlCommand(pSql, conn);
cmd.Prepare();
int i = 0;
foreach (object obj in pParameters)
{
    cmd.Parameters.AddWithValue(String.Format("@{0}", i.ToString()), obj);
    i++;
}
cmd.ExecuteNonQuery();

在MySQL和C#中使用表达式设置日期时间字段时发生异常

您只能将值放入参数中,而不能将表达式放入。尝试将您的查询更改为:

UPDATE feeds
SET feeds.delta=@0,feeds.next=@1,feeds.last_changed=@2  + INTERVAL 15 MINUTE
WHERE id = 19 LIMIT 1

然后将参数设置为仅日期日期/时间值,例如2013-05-22 11:58:57

如果datetime参数来自c#,您应该只使用

DateTime.AddMinutes(<yourdateTimeParameter>, 15);
相关文章: