mysql日期时间格式使用c#

Posted

技术标签:

【中文标题】mysql日期时间格式使用c#【英文标题】:mysql date time format using 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 中的格式查询写入此查询 【参考方案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)

【讨论】:

以上是关于mysql日期时间格式使用c#的主要内容,如果未能解决你的问题,请参考以下文章

选择与 PHP 相同时更改 MySQL C# 默认日期格式

Mysql DB 返回错误的日期格式(C#)

.Net for MySQL 数据库中的日期时间格式

c#字符串日期格式从d.M.yyyy到yyyy-MM-dd

c#日期时间格式

旧版本的 MySQL 是不是允许不同的日期格式?