1

我需要使用 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表记录:

在此处输入图像描述

4

3 回答 3

2

尝试在 SQL 查询中直接包含一个值是错误的。使用参数化 SQL 并将值指定为 aDateTime,并假设您的数据库表使用日期/日期时间字段(应该是),您应该没问题。

您应该避免在 SQL 中直接包含值,原因有以下三个:

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

你想要这样的东西:

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 还不是合适的数据类型,您应该更改它...

于 2013-02-19T08:00:18.367 回答
1

将您的列d.despdate转换为DATE使用STR_TO_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()
        }
    }
}
于 2013-02-19T08:00:27.617 回答
0

应该是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)
于 2013-02-19T08:00:32.920 回答