【问题标题】:mysql date time format using c#mysql日期时间格式使用c#
【发布时间】:2013-02-03 20:10:50
【问题描述】:

我需要使用 C# 代码在 mysql 记录中搜索有关日期值的一些数据。我在 c# 中使用以下代码,但我找不到记录。请帮帮我。

我的 C# 代码:

Select distinct v.* from Ven v inner join Des d on v.venid=d.venid and cast( d.despdate as datetime) between  cast('" + dTime1.Value.ToString("dd-MMM-yyy") + "' as datetime) and cast('" + dTime2.Value.ToString("dd-MMM-yyy") + "'as datetime)

我的Mysql表记录:

【问题讨论】:

  • 看起来 rdbms 是 mssql..
  • @IswantoSan ya 我正在从 ms-sql 代码转换为 my-sql。 dono 如何将 my-sql 中的格式查询写入此查询

标签: c# mysql datetime


【解决方案1】:

尝试在 SQL 查询中直接包含一个值开始时会出错。使用参数化 SQL 并将值 指定为DateTime,并假设您的数据库表使用日期/日期时间字段(应该是),您应该很好。

出于三个原因,您应该避免在 SQL 中直接包含值:

  • 您最终会遇到麻烦的字符串转换,可能会使用不适当的格式等。这就是问题所在。
  • 您正在邀请SQL injection attacks
  • 您正在混合代码和数据,这使得代码更难阅读,也更难检查数据

你想要这样的东西:

string sql = @"Select distinct v.* from Ven v 
               inner join Des d on v.venid=d.venid 
               and cast(d.despdate as datetime) between @start and @end";
using (MySqlCommand command = new MySqlCommand(connection, sql))
{
    command.Parameters.AddWithValue("@start", startDateTime);
    command.Parameters.AddWithValue("@end", endDateTime);
    // Execute the command here
}

如果Des.despdate 不是已经是合适的数据类型,你应该改变它...

【讨论】:

    【解决方案2】:

    使用STR_TO_DATE 将您的列d.despdate 转换为DATE

    SELECT  ...
    FROM    ...
    WHERE   STR_TO_DATE(d.despdate, '%d-%b-%Y') BETWEEN '2013-01-15' AND '2013-01-30'
    

    为了获得更好的性能,使用MySQLCommand 对象参数化查询。例如,

    string connStr = "connection string here";
    string query = @"SELECT ... 
                    FROM... 
                    WHERE STR_TO_DATE(d.despdate, '%d-%b-%Y') BETWEEN @date1 AND @date2"
    using(MySqlConnection _conn = new MySqlConnection(connStr))
    {
        using (MySqlCommand comm = new MySqlCommand())
        {
            comm.Connection = conn;
            comm.CommandText = query;
            comm.Parameters.AddWithValue("@date1", dTime1.Value);
            comm.Parameters.AddWithValue("@date2", dTime2.Value);
            try
            {
                conn.Open();
                comm.ExecuteNonQuery();
            }
            catch(MySqlException e)
            {
                // do something with
                // e.ToString()
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      应该是yyyy

       Select distinct v.* from Ven v inner join Des d on v.venid=d.venid and cast( d.despdate as datetime) between  cast('" + dTime1.Value.ToString("dd-MMM-yyyy") + "' as datetime) and cast('" + dTime2.Value.ToString("dd-MMM-yyyy") + "'as datetime)
      

      【讨论】:

        猜你喜欢
        • 2015-03-23
        • 2012-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-05
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多