在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
设置feeds
。delta
=@0,feeds
。next
=@1,feeds
。last_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();
您只能将值放入参数中,而不能将表达式放入。尝试将您的查询更改为:
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);