gpt4 book ai didi

c# - 在 mysql 更新查询中使用 c# datetime

转载 作者:行者123 更新时间:2023-11-29 01:31:09 28 4
gpt4 key购买 nike

我正在尝试使用 MySQL 网站上 .net 的 mysql 连接器从 C# 运行查询到 MySQL(版本 5.5.27)。

我开发的 .dll 的最终目标是跟踪我读过的行。

我用来读取数据库的查询是:

string strSQL = "SELECT date,ask,bid,volume FROM gbpjpy where `read` = 0";

要读入日期,我有:

DateTime dateTime = mysqlReader.GetDateTime(0);

这很好。

该表有 5 列,最后一列称为“已读”。选择查询和解析完成后,我立即执行以下查询:

string sqlFormattedDate = dateTime.ToString("yyyy/MM/dd HH:mm:ss");
string query = "UPDATE gbpjpy SET `read` = 1 WHERE `date` = " + sqlFormattedDate;

但是,当我查看日志时,出现以下错误:

您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“01:20:08”附近使用的正确语法。

读入的第一个日期是 2012/08/30 01:20:08(这就是它在 MySQL 表中的显示方式,因此它就是从 01:20:08 获得的)。

我试过 var sqlFormattedDate,将 ToString 重载更改为 yyyy-MM-dd(使用破折号而不是正斜杠)和 dateTime.ToString() 都无济于事。

为什么 MySQL 不提取整个字符串?

最佳答案

基本上,您应该避免直接在查询中包含值。

毫无疑问,您可以在值周围加上引号...但您不应该这样做。相反,您应该使用参数化 SQL,并将值放在参数中。这样您就不会进行容易出错的字符串转换,避免 SQL 注入(inject)攻击(针对字符串参数),并且将代码与数据分开。

(举个例子,说明这有多么微妙,您当前的代码将使用“当前文化”的日期和时间分隔符——可能不是 /: 。您可以通过指定 CultureInfo.InvariantCulture 来解决此问题...但最好根本不要进行转换。)

查找有关您正在使用的任何 Command 类型(例如 MySqlCommand.Parameters)的 Parameters 属性的文档,这有望为您提供帮助例子。参数化 SQL 的文档中甚至可能有一个教程部分。例如,this page 可能是您所追求的。

关于c# - 在 mysql 更新查询中使用 c# datetime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12195147/

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