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#的主要内容,如果未能解决你的问题,请参考以下文章