在MySQL更新查询使用C#日期时间(using c# datetime in mysql upda

2019-07-31 06:46发布

我试图从运行C#到MySQL(版本5.5.27)使用从MySQL网站.NET中的MySQL连接的查询。

我开发的.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服务器版本近01年的使用权语法手册:在1号线08' :20。

读出第一日期是2012年8月30日1时20分08秒(这就是它是如何出现在MySQL表,因此,这就是它得到1点20分08秒)。

我试过VAR sqlFormattedDate,改变了ToString重载以YYYY-MM-DD(使用破折号,而不是正斜杠)和则DateTime.ToString()都无济于事。

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

Answer 1:

基本上你应该避免直接包括你的查询值。

毫无疑问,你可以把引号围绕价值......但你不应该。 相反,你应该使用paramterized SQL,并把该值的参数。 你不容易出错的字符串转换这样一来,就避免了SQL注入攻击(字符串参数),并从数据分开的代码。

(至于如何巧妙地破这可以是一个例子,当前的代码将使用“当前文化”的日期和时间分隔符-这可能不是/:你可以通过指定修复此CultureInfo.InvariantCulture ...但最好不要做转换的。)

寻找一个文件的Parameters上的任何财产Command你使用类型(例如MySqlCommand.Parameters ),这将有望给您的例子。 甚至有可能是参数化的SQL的文档中的教程部分。 例如, 该页面 可能是你追求的。



Answer 2:

我想你必须把整个价值引号中的日期。 如果你真的串联查询,它会是什么样子

UPDATE gbpjpy SET `read` = 1 WHERE `date` = yyyy/MM/dd HH:mm:ss

这等号将只需要值,直到第一个空间。

相反,它应该看起来像

UPDATE gbpjpy SET `read` = 1 WHERE `date` = 'yyyy/MM/dd HH:mm:ss'

这是在这种情况下,特别的原因,但是,串联这样的查询导致的现实可能性的SQL注入 。 作为一个经验法则,你不应该这样做。 您可以使用参数化查询,可能有你使用做到这一点的.NET连接器的API。



Answer 3:

投入参数信息允许代码格式化,因为它需要。 可能的是,你原来的问题可能已经从使用斜杠,而不是破折号在你的日期格式朵朵。 我会认为斜线可以工作,但最重要的是我见过的文档中有破折号分离与MySqlDateTimes日期。



文章来源: using c# datetime in mysql update query
标签: c# mysql dll