【问题标题】:C# application with mysql database with date saved as string带有 mysql 数据库的 C# 应用程序,日期保存为字符串
【发布时间】:2015-11-20 16:33:39
【问题描述】:

我有一个应用程序,我在其中存储一个日期类型为“字符串”的值

问题是当我执行程序时,查询的结果在 C# 中没有正确显示,但是当我在 mysql 工作台中应用相同的查询时,结果是正确的。

日期值在mysql中存储为字符串;我们可以这样使用比较,还是错误的?

string s = "select date  from guest,program where guestid=guest.id AND *date >= " + date + "* "' ";

【问题讨论】:

  • MySQL 数据库中的“日期”是日期类型还是字符串类型? C# 中的“日期”变量是字符串吗?此外,像这样设置查询可能会导致 SQL 注入(非常糟糕)。最好使用参数化查询。
  • 提供从数据库中检索数据的代码和date 变量的示例字符串将有助于我们理解问题。
  • mjw no 实际上它是不同的,因为我检查了字符串问题并且没有找到任何可以帮助我的东西。我不知道将日期存储在数据库中是否有问题
  • Russ 是的,它们都是字符串。我会查找 SQL 注入,但现在我需要尽快解决这个问题。我现在正在尝试生成工作代码,而不是最佳代码。

标签: c# mysql date


【解决方案1】:

由于您在数据库中的列是date 列,并且您要传递的值是DateTime 结构,因此作为一个好习惯,请尝试在命令中使用参数。在命令中使用参数,可以避免很多问题,例如 sql 注入、类型定义等。示例:

string sql = "select date  from guest,program where guestid=guest.id AND date >= @date";

using (MySqlConnection con = new MySqlConnection("your connectionstring"))
{
    MySqlCommand cmd = new MySqlCommand(sql, con); 

    try 
    { 
        con.Open(); 
        cmd.Parameters.AddWithValue("date", date); 

        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                var dateField = (DateTime)reader["date"];
                // some task
            }
        }
    } 
    finally 
    { 
        con.Close(); 
    }
}

在此处阅读更多信息:http://www.csharp-station.com/Tutorial/AdoDotNet/Lesson06

【讨论】:

  • con.Close();try finally 在您的代码中是 冗余using 将完成这项工作
  • 它是一个字符串而不是一个 Date 。我的意思是该值是日期类型,但存储为字符串。对不起,如果不是很明显:(
猜你喜欢
  • 1970-01-01
  • 2018-05-25
  • 2013-05-03
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 2012-07-04
  • 1970-01-01
相关资源
最近更新 更多