2013-02-19 122 views
1

我需要使用C#代码搜索mysql日志中有关日期值的数据。我在c#中使用以下代码,但我无法找到记录。请帮帮我。使用c#mysql日期时间格式#

我的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表记录:

enter image description here

+0

看起来像RDBMS是MSSQL .. – 2013-02-19 07:59:44

+0

@IswantoSan雅我从MSSQL代码转换为我-SQL。 dono如何在my-sql中将格式查询写入此查询 – Nirmala 2013-02-19 08:10:13

回答

2

你试图通过直接在您的SQL查询开始与包括值走错了。使用参数化的SQL,并将值指定为DateTime,并假定您的数据库表为也使用date/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不是已经是一个合适的数据类型,你应该改变...

1

使用STR_TO_DATE

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

有更好的表现将您列d.despdateDATE,参数使用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() 
     } 
    } 
} 
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)