gpt4 book ai didi

c# - 如何从 C# 中将 MySQL 数据库函数作为查询参数传递

转载 作者:行者123 更新时间:2023-11-30 21:22:52 27 4
gpt4 key购买 nike

让我稍微解释一下。

图像你有流动的 MySQL 表:

CREATE TABLE test (
value DATETIME
);

目前我正在做这样的事情:

command.CommandText = "UPDATE test SET value = ?value";
command.Parameters.AddWithValue("?value", DateTime.Now);

但是客户端的日期/时间设置不可靠,所以我希望在服务器上确定时间。像这样的东西:

command.CommandText = "UPDATE test SET value = NOW()";

诀窍是我想将“NOW()”函数作为参数传递给原始查询。请理解这个小例子过于简化了。实际上,该表有 48 列,其中 7 列是日期时间,标记用户对数据库行表示的对象进行特定操作的日期和/或时间。当用户对对象执行新操作时,我读取整行并再次插入它,当然使用不同的 ID(有点像穷人的修订历史记录)所以我喜欢保留旧操作的日期/时间和将其插入新行,但同时为新操作设置当前日期/时间(如数据库所见)。

为简单起见,让我们回到前面的示例。

据我所知,我有两个选择。

bool switch;
....
command.CommandText = "UPDATE test SET value = " + switch ? "NOW()" : "?value";
command.Parameters.AddWithValue("?value", value);

bool switch;
....
if (switch) {
command.CommandText = "SELECT NOW()";
value = Convert.ToDateTime(command.ExecuteScalar());
}
command.CommandText = "UPDATE test SET value = ?value";
command.Parameters.AddWithValue("?value", value);

我不喜欢他们中的整洁者。如果我可以做类似的事情,那岂不是很整洁:

command.CommandText = "UPDATE test SET value = ?value";
if (switch) {
command.Parameters.AddWithValue("?value", "NOW()");
} else {
command.Parameters.AddWithValue("?value", value);
}

这样我仍然会执行同一个查询。

等待您对此的意见。如果您能提供任何帮助,我将不胜感激。

最佳答案

您可以使用带有可选参数的存储过程来实现此目的。如果参数为 NULL,则改用 NOW()。虽然我不是存储过程的忠实粉丝(它们是邪恶的!:-)。

你也可以使用 IFNULL() .下面是在 T-SQL 中是如何完成的(函数名称是 ISNULL):

UPDATE test SET value = ISNULL(@value, GetDate() )

关于c# - 如何从 C# 中将 MySQL 数据库函数作为查询参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1910923/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com