我正在文本框中捕捉时间(通过使用AJAX日历扩展程序)
字符串中的时间是12/10/2013
,但是当我将字符串分配给日期时间对象时,它将转换为12/10/2013 12:00:00 AM
。
我想使用日期来使用下面的查询过滤数据库中的记录。请帮忙
string date1 = txtDate1.Text;
DateTime date = DateTime.ParseExact(txtDate1.Text, "MM/dd/yyyy",
System.Globalization.CultureInfo.InvariantCulture);
string strQuery = "SELECT Story.UserName,Story.StoryId,COUNT(Likes.StoryID) AS NumberOfOrders
FROM Likes LEFT JOIN Story ON Likes.StoryId=Story.StoryId and liked=" + date1 + "
GROUP BY Story.StoryId,Story.UserName order by NumberOfOrders DESC ;";
答案 0 :(得分:2)
在查询中将日期作为字符串传递通常不是一个好主意,因为您很可能会遇到格式问题 - 请将其留给您使用的框架决定最佳格式。
在您的情况下,您可以使用SqlParameter
例如
DateTime date = DateTime.ParseExact(txtDate1.Text, "MM/dd/yyyy", CultureInfo.InvariantCulture);
string strQuery = "SELECT Story.UserName, Story.StoryId, COUNT(Likes.StoryID) AS NumberOfOrders
FROM Likes LEFT JOIN Story ON Likes.StoryId=Story.StoryId and liked=@dateTime
GROUP BY Story.StoryId,Story.UserName order by NumberOfOrders DESC";
using (SqlConnection connection = new SqlConnection("..."))
{
using (SqlCommand cmd = new SqlCommand(strQuery, connection))
{
cmd.Parameters.AddWithValue("@dateTime", date);
connection.Open();
SqlDataReader reader = cmd.ExecuteReader();
...
}
}
在编写原始SQL时使用参数的另一个重要原因是确保您的用户输入被正确地保护,并且可以安全地传递给数据库。如果不这样做,您可以接受SQL Injection等各种开发。
答案 1 :(得分:0)
您可以使用Date对象代替DateTime对象。
DateTime是一个解释为表示DateTime的两个部分的整数(即:日期和时间)。您将始终在DateTime中同时拥有日期和时间。
例如:
DateTime.Now.ToString("MM/dd/yyyy");