0

我无法让参数化的 SQL 语句在名为feeds.

该表是这样定义的;

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 语句。

更新feedsfeedsdelta=@0, feeds. next=@1, feeds. last_changed=@2 其中 id = 19 限制 1

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

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

这会产生以下错误。

MySql.Data.MySqlClient.MySqlException (0x80004005): 不正确的日期时间值: '(2013-05-22 11:58:57 + INTERVAL 15 MINUTE)' for column 'next' at row 1

我尝试将日期时间放在引号中,但这没有帮助。

这就是我在C#.

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();
4

2 回答 2

2

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

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

于 2013-05-22T16:21:35.763 回答
2

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

DateTime.AddMinutes(<yourdateTimeParameter>, 15);
于 2013-05-22T16:22:42.243 回答